发布网友 发布时间:2022-04-25 23:25
共2个回答
懂视网 时间:2022-04-26 03:46
最近项目组发现在使用showModalDialog弹出窗体中如果包含IFrame对象,则IFrame对象占用的内存资源在窗体关闭后不会释放。弹出关闭反复多次后,IE浏览器内存占用可超过数百M,严重时IE浏览器报错,且无法关闭,只能通过杀进程的方式重启浏览器。经测试,使用open方式弹出也存在该问题。在IE8浏览器中,open和showModalDialog弹出的内存占用有差异:
open方式弹出的窗体占用的是一个独立的iexplorer.exe进程;
showModalDialog方式弹出的窗体使用和父窗体相同的iexplorer.exe进程;
经过搜索,发现解决办法是在窗体关闭前,从窗体中删除IFrame对象,代码如下:
但是测试的时候,发现有两个限制:
1. el.src可能还没有执行完,就执行后面的语句,如果IFrame中包含的是跨域内容,则会提示没有权限;
2. 窗体关闭的比脚本执行的快,内存仍然没有释放;
经过修改,最终脚本如下:
热心网友 时间:2022-04-26 00:54
你好,ie浏览器的iframe无法释放内存是个公认的bug,相关资料称IE在iframe元素的回收方面存在着bug,在通常情况下应该将该元素的src属性值修改为”abort:blank”,并手工将其从 DOM树上移除,然后把脚本中引用它的变量置空并调用CollectGarbage()就可以避免iframe不能正常回收所造成的内存泄露。