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

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

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

请考虑以下场景。 使用 Internet Explorer 8 查看包含 iframe 的 HTML 页面。 在 Internet Explorer 中,从 iframe 中导航。 因此,不会返回相应iexplorer.exe进程的内存级别,如果多次访问 iframe 页,则会导致内存累积。 此问题在 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 库中也可能出现此问题。