我今天可能在Umbraco 4.8.1中发现了一个奇怪的问题(这不是早期版本的问题,也没有测试过更新的版本)。
复制步骤
- 在WindowsXP上打开Umbraco管理系统使用任何Internet基于浏览器的浏览器-这不是Chrome、Firefox的问题或Safari
- 登录到管理系统
- 导航到内容部分
- 单击内容并创建一个新的内容项,然后选择文档类型
- 单击"创建">
此时我希望看到新创建项目的仪表板。但实际发生的是,创建对话框消失了,您仍然留在同一个初始面板上,树也没有更新。如果单击树上的"重新加载节点",则新节点就在其中——您可以单击它,然后获得相同的新内容面板。
使用windowsxp操作系统时,IE6、IE7和IE8会出现此问题。当我使用Windows7时,这不是一个问题,而且看起来工作正常。
我用fiddler检查了两台机器的本地流量。在Windows7版本上,我注意到第二次调用create.aspx?它重新编辑了一个200,然后对editContent.aspx等进行了后续调用——在Windows XP上,会进行第二次调用,但不会调用后续的editContent.aspx。它似乎确实创建了节点,但随后无法重定向或调用页面。
有人能帮忙吗?建议发生了什么?我试着在没有太多帮助的情况下查看论坛和谷歌?
请不要回复告诉您的客户端不要使用Windows XP。请不要回复你会在umbraco论坛上运气更好-我已经在那里发帖了:http://our.umbraco.org/forum/using/ui-questions/36841-Create-Content-does-not-redirect-to-new-Content-Page-on-IE6-8-on-Windows-XP
经过一番调查,我找到了造成这种情况的原因。Umbraco使用一个javascript文件UmbracClientManager.js和一个名为contentFrame的函数来重定向主面板框架。
在4.7.1和以前的版本中,没有在重定向周围添加setTimeout闭包:
第133行umbracoclient\Application\UmbracClientManager(版本4.8.1+)
var self = this;
window.setTimeout(function(){
if (typeof self.mainWindow().right != "undefined") {
self.mainWindow().right.location.href = strLocation;
}
else {
self.mainWindow().location.href = strLocation; //set the current windows location
if the right frame doesn't exist int he current context
}
},200);
第133行umbracoclient\Application\UmbracclientManager(版本4.7.1)-上面的代码实际上是
if (typeof this.mainWindow().right != "undefined") {
this.mainWindow().right.location.href = strLocation;
}
else {
this.mainWindow().location.href = strLocation; //set the current windows location if the right frame doesn't exist int he current context
}
因此,如果您重定向到的仪表板页面花费的时间超过200ms,则它将不会显示,并且javascript功能将在4.8.1或更高版本的中超时
所以,如果你的仪表盘耗时超过200ms,最好的办法就是将其提高到一个合适的值。
我在这里记录了这一点:http://issues.umbraco.org/issue/U4-1311