700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > IE浏览器IFrame对象内存不释放问题解决方法【javascript】

IE浏览器IFrame对象内存不释放问题解决方法【javascript】

时间:2022-04-27 03:56:51

相关推荐

IE浏览器IFrame对象内存不释放问题解决方法【javascript】

web前端|js教程

IE浏览器,IFrame,内存

web前端-js教程

最近项目组发现在使用showModalDialog弹出窗体中如果包含IFrame对象,则IFrame对象占用的内存资源在窗体关闭后不会释放。弹出关闭反复多次后,IE浏览器内存占用可超过数百M,严重时IE浏览器报错,且无法关闭,只能通过杀进程的方式重启浏览器。经测试,使用open方式弹出也存在该问题。

vb 获取源码,ubuntu 完全卸载包,tomcat 支持用户数,python 爬虫教学,php首页广告弹窗代码,janguk seolzw

在IE8浏览器中,open和showModalDialog弹出的内存占用有差异:

java 源码lib,Ubuntu更改地区,爬虫获取app视频,php plates,seo环境运营lzw

open方式弹出的窗体占用的是一个独立的iexplorer.exe进程;

房产网站php源码,Ubuntu常用的桌面,tomcat打开网站空白,爬虫淘宝美食,php字母验证码,船长seolzw

showModalDialog方式弹出的窗体使用和父窗体相同的iexplorer.exe进程;

经过搜索,发现解决办法是在窗体关闭前,从窗体中删除IFrame对象,代码如下:

var el = document.getElementById("scanIf");el.src="";el.contentWindow.document.write(\);el.contentWindow.document.clear();var p = el.parentNode;p.removeChild(el);

但是测试的时候,发现有两个限制:

1. el.src可能还没有执行完,就执行后面的语句,如果IFrame中包含的是跨域内容,则会提示没有权限;

2. 窗体关闭的比脚本执行的快,内存仍然没有释放;

经过修改,最终脚本如下:

function unloadHandler(notip) {// 取消窗口关闭时的监听事件document.getElementsByTagName("BODY")[0].onbeforeunload = null;var el = document.getElementById("scanIf");if (el) {el.src = "";setTimeout(cycleClear, 100);return "提示:请点击取消按钮,当前窗口会自动关闭。";}return true;}function cycleClear() {try {var el = document.getElementById("scanIf");if (el) {el.contentWindow.document.write(\);el.contentWindow.document.clear();var p = el.parentNode;p.removeChild(el);}window.close();} catch (e) {setTimeout(cycleClear, 100);}}//window.onunload = unloadHandler;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。