Internet explorer GWT应用程序不是第一次加载到IE中,但在刷新后加载良好

Internet explorer GWT应用程序不是第一次加载到IE中,但在刷新后加载良好,internet-explorer,gwt,Internet Explorer,Gwt,我有一个使用GWT2.4.0构建的应用程序。不久前出现了一个问题,对于Internet Explorer的一些用户来说,应用程序第一次没有正确加载(只显示静态内容)。但是,在使用refresh(F5)后,应用程序会正常重新加载,然后工作正常 关于这个问题的一些注意事项: Firefox中不存在此问题 此问题仅针对特定用户,而不是任何地方。即使在同一个桌面上,如果不同的用户登录,应用程序在IE中也可以正常工作。我们还尝试将出现此问题的用户登录到另一个桌面上-在另一个桌面上没有问题 这个问题从来没

我有一个使用GWT2.4.0构建的应用程序。不久前出现了一个问题,对于Internet Explorer的一些用户来说,应用程序第一次没有正确加载(只显示静态内容)。但是,在使用refresh(F5)后,应用程序会正常重新加载,然后工作正常

关于这个问题的一些注意事项:

  • Firefox中不存在此问题
  • 此问题仅针对特定用户,而不是任何地方。即使在同一个桌面上,如果不同的用户登录,应用程序在IE中也可以正常工作。我们还尝试将出现此问题的用户登录到另一个桌面上-在另一个桌面上没有问题
  • 这个问题从来没有在开发机器上被观察到过——只有少数测试人员和一些业务用户
  • 对于那些观察到问题的用户来说,从大约4个月前开始,这种情况100%都会发生(没有例外)
  • 当尝试使用IE的开发工具捕获网络请求时,它显示总是请求某个*.cache.html文件,但从未找到(HTTP 404)。那个档案 在编译的应用程序中不存在,因此不清楚为什么会请求它。刷新时,不会请求此文件,因此不会发生404错误
  • IE9的开发工具显示
    浏览器模式:IE9兼容视图
    文档模式:IE7标准

有什么问题吗?我如何才能准确地找到并修复问题的原因?

您能否尝试修改History.gwt.xml并删除:

<!-- IE6 has a completely different history implementation. IE8 used the -->
<!-- standard implementation. -->
<replace-with class="com.google.gwt.user.client.impl.HistoryImplIE6">
  <when-type-is class="com.google.gwt.user.client.impl.HistoryImpl"/>
  <when-property-is name="user.agent" value="ie6"/>
</replace-with>

如果将此修改后的文件及其命名空间添加到项目中,则应获得正确的历史记录实现


我不明白为什么如果您在IE8和IE9中,您的项目会选择
HistoryImplIE6

最后,似乎是Internet Explorer的缓存出现了一些问题。它似乎为收藏夹中的站点保留了一些缓存。实际上有两种解决方案:

a) 对于用户来说,修复方法是从收藏夹中删除链接,然后重新添加链接

b) 在代码中,我们在
index.jsp
中添加了以下标记,以强制IE9进入IE9文档模式,如下所示:


这些解决方案是独立的,可以一次使用一个解决方案,也可以同时使用两个解决方案。

您是否检查了onModuleLoad的第一行是否已执行?如果对某些用户来说,该应用程序正常工作,那么在登录时可能会出现问题(可能是cookie或sessionId问题)。您的应用程序是否部署在同一主机下的不同端口上?onModuleLoad中的代码似乎正在正常执行,因为它成功地将某些版本信息添加到主屏幕。应用程序的URL中没有任何端口。在这种情况下,问题不在gwt中。检查登录过程,或尝试重现错误并设置断点,以确定导致错误的步骤,但可能与登录有关,因为只有某些用户登录失败……您是否在服务器上缓存会话?我们已尝试将出现问题的用户登录到另一个桌面,在那里一切都很好。(更新后的帖子反映了这一点)我已经尝试过了,奇怪的是,这解决了应用程序在初始启动时无法加载的问题。但是,这会破坏导航(这是通过更改URL的散列部分来完成的,如
#Search
#Preferences
,等等),因此需要做更多的事情。在这种情况下,浏览器的历史记录实现是不正确的。还有更多的东西。我已经在浏览器上测试了我的应用程序,历史记录在IE8、IE9等上运行得非常好。卸载并重新安装IE,因为这是要遵循的路径。您还可以调试HistoryImpl并查看它在哪里中断。有stacktrace吗?没有stacktrace,而是当尝试在
HistoryImplIE6.getTokenElement()
方法中访问历史帧的文档时出现客户端脚本错误“访问被拒绝”。不清楚为什么会选择
HistoryImplIE6
——可能与浏览器处于的模式有关。当尝试显式地将IE9设置为在IE9浏览器模式和IE9标准模式下工作时,应用程序在第一次尝试时工作正常。因此,如果您在正确的模式下使用IE8和IE9,错误是否会消失?是的,如果观察到错误,则在使用正确的模式时错误会消失。@apanizo-感谢您的帮助!