相关文章推荐
宽容的领带  ·  iframe ...·  3 周前    · 
纯真的橙子  ·  在 ASP.NET Core ...·  3 周前    · 
喝醉的骆驼  ·  在iframe中显示缩略图 - ·  3 周前    · 
寂寞的茶叶  ·  ios iframe ...·  1 周前    · 
行走的眼镜  ·  cout 输出 uint8_t ...·  6 月前    · 

在某些版本的 Windows 10 上,通过 Microsoft Edge 更新永久禁用已停用的不支持的 Internet Explorer 11 桌面应用程序。 有关详细信息,请参阅 Internet Explorer 11 桌面应用停用常见问题解答

本文讨论在离开包含 Internet Explorer 8 中 iframe 的 HTML 页面时内存使用量上升的问题。

原始产品版本: Internet Explorer 8
原始 KB 编号: 2714930

请考虑以下应用场景: 使用 Internet Explorer 8 查看包含 iframe 的 HTML 页面。 在 Internet Explorer 中,导航离开 iframe。 因此,如果多次访问 iframe 页面,则不会返回相应iexplorer.exe进程的内存级别,从而导致内存累积。 此问题将显示为 Internet Explorer 中的内存泄漏给用户。 仅当导航离开顶部页面时,才会返回内存。

如果 iframe 动态创建并孤立 DOM 元素,设置其 innerHTML 属性,并创建循环引用 (通常通过事件处理程序) ,则可能会出现这种情况。

若要解决此问题,请清除事件处理程序以中断循环引用。

可以使用以下示例代码重现此问题。 注释指示如何解决此问题。

top.htm

<!DOCTYPE html>
        <meta http-equiv="X-UA-Compatible" content="IE=8"/>
    </head>
            <a href="about:blank">about:blank</a><br/>
            <iframe src="iframe.htm"></iframe>
        </body>
</html>

iframe.htm

<!DOCTYPE html>
        <meta http-equiv="X-UA-Compatible" content="IE=8"/>
        <script src="test.js" type="text/javascript"></script>
    </head>
        <div style="font-size: 9pt">In Internet Explorer 8, click the link 10x and you'll see private bytes increase.<br/>
        Note: Leaving the main page won't clear the memory right away. However, if the top page includes the same test.js file, it will clear the memory right away.<br/>
        <a href="iframe.htm">iframe</a><br/>
    </body>
</html>

test.js

(function ()
    var div2 = document.createElement("div");
    div2.innerHTML = "<div></div>"; // commenting this out will prevent the memory from accumulating
    var tmpFnc = null;
    div2.attachEvent("onclick", tmpFnc =
        function ()
    //div2.detachEvent( "onclick", tmpFnc); // calling this will prevent the memory from accumulating
})();
// this is a long comment, Copy and paste the 100 character line below to make the leak more prominent.
// 1000 lines will leak about 1.1-1.2 MB per iteration.
// 34567890123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678

如果使用 jQuery.js v1.7.2 代替test.js,则可以看到此问题。 早期版本的 jQuery 也可能显示此问题。 此外,在执行相同操作的其他 JavaScript 库中也可以看到此问题。