IE下使用框架重置内联框架地址时内存泄露问题解决办法
页面中有个iframe:
复制代码代码如下: iframe src=' a . html '/iframe按钮测试内联框架泄露/按钮
其中a.html内容如下:
复制代码代码如下:DOCTYPE html html heartheta charset=' UTF-8 '标题在此插入标题/title脚本类型=' text/JavaScript ' src=' http : jquery/jquery。量滴js '/脚本样式。黑客{/* 1 .所有浏览器都有效*/底色-颜色:绿色;/* 2.IE8~IE10,歌剧有效,但是歌剧兼容性可以不考虑*/背景-color :蓝色\ 0;/* 3.IE9~IE10有效,与2组合,在2中先写针对IE8的,在此条中针对IE9 | IE10 */底色-:红色\ 9 \ 0;/* 4.IE7有效,与23组合能区分出IE7/IE8/(IE9|IE10) */背景色-:黄色;}/* 针对IE10 */@媒体屏幕和(-ms-high-contrast:活动)、(-ms-高对比度:无){。黑客背景色-颜色:粉色;} }/样式/床头柜
后缀\9' IE6/IE7/IE8/IE9/IE10都生效后缀\0' IE8/IE9/IE10都生效,是IE8/9/10的砍后缀'\9\0' 只对IE9/IE10生效,是IE9/10的砍前缀'*' 对IE7有效前缀' ' 对IE7有效选择器前缀@媒体屏幕和(-ms-high-contrast:活动)、(-ms-高对比度:无)针对IE10有效
复制代码代码如下:输入类型=“文本”值='中文/input div class=' hack ' style=' width :100 px;height :100 px '/div div id=' 1 ' style=' padd :5 px;位置:相对;背景-颜色:绿色;余量margin:10pxborder:20px固体红色;宽度:100%;'height :200 px '/div div id=' 2 '/div span span/span/body/html b . html内容如下:
复制代码代码如下:DOCTYPE html html heartheta charset=' UTF-8 '标题在此插入标题/title脚本类型=' text/JavaScript ' src=' http : jquery/jquery。量滴js '/script/headdyspanspan/span/body/html
网上有传,如下写法可降低内存泄露:
复制代码代码如下: var FrameDom=$(' iframe : eq(0)')[0];var FrameWin=FrameDom。content WiNDOW请尝试{ FrameWin。文件。write(');框架胜利。文件。clear();} catch(e){ };framedom。src=' b . html
那么效果怎样呢?
写法一:直接设置统一资源定位器
复制代码代码如下:var标志=真;var FrameDom=$(' iframe : eq(0)')[0];$("按钮")。on('click ',function(){ if(flag){ var FrameDom=$(' iframe : eq(0)))[0];var FrameWin=FrameDom。content WiNDOW/*尝试{ FrameWin。文件。write(');框架胜利。文件。clear();} catch(e){ };*/FrameDom。src=' b . htmlflag=false } else { var FrameDom=$(' iframe : eq(0)')[0];var FrameWin=FrameDom。content WiNDOW/*尝试{ FrameWin。文件。write(');框架胜利。文件。clear();} catch(e){ };*/FrameDom。src=' a . htmlflag=true }//$(“# console”).追加(标志?'切换到a.html': '切换到b . html ');});
使用筛子测试:每切换一次,#泄漏增加28左右。
写法二:按网传写法
复制代码代码如下:scriptvar标志=true var FrameDom=$(' iframe : eq(0)')[0];$("按钮")。on('click ',function(){ if(flag){ var FrameDom=$(' iframe : eq(0)))[0];var FrameWin=FrameDom。content WiNDOW请尝试{ FrameWin。文件。write(');框架胜利。文件。clear();} catch(e){ };framedom。src=' b . htmlflag=false } else { var FrameDom=$(' iframe : eq(0)')[0];var FrameWin=FrameDom。content WiNDOW请尝试{ FrameWin。文件。write(');框架胜利。文件。clear();} catch(e){ };framedom。src=' a . htmlflag=true }//$(“# console”).追加(标志?'切换到a.html': '切换到b . html ');});/script
使用筛子测试:每切换一次,#泄漏增加28左右。与写法一并没有什么差别
写法三:
复制代码代码如下:var标志=真;var FrameDom=$(' iframe : eq(0)')[0];$("按钮")。on('click '),function(){ if(flag){/* try { frame DOM。内容窗口。文件。write(');framedom。内容窗口。文件。clear();framedom。内容窗口。close();} catch(e){ };*/$(“iframe : eq(0)”).移除();$(“正文”).追加(' iframe src=' b . html '/iframe ');flag=false}else{ /*尝试{ FrameDom。内容窗口。文件。write(');framedom。内容窗口。文件。clear();framedom。内容窗口。close();} catch(e){ };*/$(“iframe : eq(0)”).移除();$(“正文”).追加(' iframe src=' a . html '/iframe ');flag=true } });
使用筛子测试:#泄漏平均为3,与前两种相差巨大
写法四:注意到,写法三中注释了一段代码,去掉注释会怎样?
复制代码代码如下:var标志=真;var FrameDom=$(' iframe : eq(0)')[0];$("按钮")。on('click '),function(){ if(flag){ try { frame DOM。内容窗口。文件。write(');framedom。内容窗口。文件。clear();framedom。内容窗口。close();} catch(e){ };$(“iframe : eq(0)”).移除();$(“正文”).追加(' iframe src=' b . html '/iframe ');flag=false} else { try { FrameDom。内容窗口。文件。write(');framedom。内容窗口。文件。clear();framedom。内容窗口。close();} catch(e){ };$(“iframe : eq(0)”).移除();$(“正文”).追加(' iframe src=' a . html '/iframe ');flag=true } });
此写法与写法3并没有明显差别,每次切换#泄漏仍然增加3左右
因此可以得出结论,最好的解决重置内联框架地址内存泄露办法就是把它干掉,再添加一个!
网传不一定靠谱啊
注:本机测试环境为WIN7 x64 IE9
版权声明:IE下使用框架重置内联框架地址时内存泄露问题解决办法是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。