我们有一个主要处理iframe的应用程序(根据需要加载应用程序中的不同页面)
最近IE浏览器更新了KB3154070(当前的IE版本:11.0.9600.18314)作为系统更新的一部分。在更新之后,大部分功能正在彻底打破。它影响了所有使用iframe的页面。内容未加载,并导致空白页。当在网络面板中检查时,请求似乎被中止,如下图所示。
Network Traffic Capture
我们执行了以下故障排除
我们确保所有iframe标签都正确关闭。
iframe的src不为空。
如果我们访问同一页面(不加载到iframe中),它可以正常工作。但是问题只在于iframe中。
作为此问题的快速解决方法,我们已要求我们的用户回滚更新。但是,这不是预期的解决方案。
您的帮助非常感激。
问候,
Swajay。
解决方法
@ Matt的回答提供了一个关于如何解决问题的线索。看起来,安装了KB3154070的IE,如果iframe在父DOM树准备好之前启动任何脚本操作,就会阻止iframe内容。如果由iframe加载的资源不包含脚本,我注意到没有阻塞。我也注意到有时IE不会用脚本阻止内容,但这可能是由于父DOM正在准备好和iframe资源加载之间的竞争条件。
另外一个观察结果是,我在边缘模式下运行IE时没有看到任何iframe加载问题。似乎问题只在兼容模式下运行时才会出现。
为了解决我工作的项目的问题,我扼死了iframe,在那里我声明src属性没有任何价值。在主页的onload处理程序中,这表示DOM树已经准备就绪 – 我使用javascript来设置iframe的src属性。这样做似乎可以正常工作,iframe正确加载。
例如,说你有以下几点:
<iframe id="myIFrame"></iframe>
在你的onload处理程序中,你有一些类似于
document.getElementById('myIFrame').src = '/whatever/url/to/load';
我仍然认为KB3154070引入了一个回归错误(如果没有错误),但也许我建议可以应用于您的应用程序。
UPDATE
IE update KB317016似乎修复了iframe加载问题。微软已经正式认出了这个错误:KB3176757。
我打算保留我的更改,因为我们的一些客户可能无法立即更新IE。此外,所做的更改仍然适用于我们需要支持的所有IE版本。