已停用、不受支持的 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 库中也可能出现此问题。