安装更新KB3154​​070后,iframe未在IE中加载

时间:2016-05-16 14:28:27

标签: asp.net internet-explorer iframe

我们有一个主要处理iframe的应用程序(根据需要加载应用程序中的不同页面)

最近,作为系统更新的一部分,IE浏览器更新了KB3154070(当前IE版本:11.0.9600.18314)。更新后,大部分功能完全破坏。它影响了所有使用iframe的页面。内容未加载并导致空白页面。在网络面板中检查时,请求似乎已中止,如下面的屏幕截图所示。 Network Traffic Capture

我们已执行以下问题排查

我们确保所有iframe代码都正确关闭。 iframe的src不为空。 如果我们访问外面的同一页面(没有加载到iframe),它工作正常。但是,问题仅在于iframe内部。 作为此问题的快速解决方法,我们已要求用户回滚更新。但是,这不是预期的解决方案。

非常感谢您的帮助。

此致 Swajay。

4 个答案:

答案 0 :(得分:10)

@Matt的回答提供了如何解决问题的线索。如果iframe在父DOM树准备好之前启动任何脚本操作,那么安装了KB3154​​070的IE似乎会阻止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';

我仍然认为KB3154​​070引入了一个回归错误(如果不是错误),但也许我建议的可以应用于您的应用程序。

<强>更新

IE更新KB317016似乎可以解决iframe加载问题。 Microsoft已正式认识到该错误:KB3176757

我计划保留我的更改,因为我们的一些客户可能无法立即更新IE。此外,所做的更改仍然适用于我们需要支持的所有IE版本。

答案 1 :(得分:4)

我们遇到了完全相同的问题。在我们的特定情况下的问题是iframe现在在它们被重新父级(即从一个DOM树位置移动到另一个DOM树位置)时中止它们的请求。我们能够通过避免在加载时移动iframe来解决新的限制。我无法确定你的情况究竟发生了什么,但我打赌这是在iframe加载开始和完成之间发生的一些交互。

答案 2 :(得分:3)

我的公司遗留软件受到此问题的严重影响。我们提出了以下通用解决方案,直到microsoft解决了这个错误:

 $(document).ready(function() {
    loadIframesIE();
 });

 function loadIframesIE() {
    var $iframe;
    $('iframe').each(function(cnt, iframe) {
        $iframe = $(iframe);

        // If the iframe body has no child, it couldn't be loaded
        if ($iframe.contents().find('body').children().length === 0 && !$iframe.attr('resetted')) {

            // Necessary to avoid an infinite loop in some cases
            $iframe.attr('resetted', true);
            $iframe.attr('src', $iframe.attr('src'));

        }
    });
 }

答案 3 :(得分:2)

在我的情况下,通过将兼容性标头设置为Edge来解决此问题。对于KB3154​​070,它不适用于文档模式7和8,但适用于9,10和Edge。

另外,文件加载后设置src的@ewh建议正常。感谢。