博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IE下使用jQuery重置iframe地址时内存泄露问题解决办法
阅读量:6840 次
发布时间:2019-06-26

本文共 2856 字,大约阅读时间需要 9 分钟。

  hot3.png

页面中有个iframe:

 

其中a.html内容如下:

Insert title here
后缀"\9"  IE6/IE7/IE8/IE9/IE10都生效后缀"\0"  IE8/IE9/IE10都生效,是IE8/9/10的hack后缀"\9\0"  只对IE9/IE10生效,是IE9/10的hack前缀"*"  对IE7有效前缀"+"  对IE7有效选择器前缀 @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none)   针对IE10有效
SPAN

b.html内容如下:

Insert title here
SPAN

网上有传,如下写法可降低内存泄露:

 var frameDom = $('iframe:eq(0)')[0]; var frameWin = frameDom.contentWindow; try{       frameWin.document.write('');       frameWin.document.clear();  }catch(e){};  frameDom.src = 'b.html';

那么效果怎样呢?

写法一:直接设置URL

var flag = true; var frameDom = $('iframe:eq(0)')[0]; $('button').on('click',function(){  if(flag){   var frameDom = $('iframe:eq(0)')[0];   var frameWin = frameDom.contentWindow;   /*   try{     frameWin.document.write('');     frameWin.document.clear();       }catch(e){};       */      frameDom.src = 'b.html';   flag = false;  }else{   var frameDom = $('iframe:eq(0)')[0];   var frameWin = frameDom.contentWindow;   /*   try{     frameWin.document.write('');     frameWin.document.clear();       }catch(e){};       */      frameDom.src = 'a.html';   flag = true;  }  //$('#console').append(flag ? '切换到a.html':'切换到b.html'); });

使用sIEve测试:每切换一次,#leaks增加28左右。

123802_YBev_168108.png

写法二:按网传写法

使用sIEve测试:每切换一次,#leaks增加28左右。与写法一并没有什么差别

123351_OXKq_168108.png

写法三:

var flag = true; var frameDom = $('iframe:eq(0)')[0]; $('button').on('click',function(){  if(flag){   /*   try{     frameDom.contentWindow.document.write('');     frameDom.contentWindow.document.clear();     frameDom.contentWindow.close();       }catch(e){};      */      $('iframe:eq(0)').remove();      $('body').append("
");   flag = false;  }else{   /*   try{     frameDom.contentWindow.document.write('');     frameDom.contentWindow.document.clear();     frameDom.contentWindow.close();       }catch(e){};      */      $('iframe:eq(0)').remove();      $('body').append("
");   flag = true;  } });

使用sIEve测试:#leaks平均增加值为 3,与前两种相差巨大

124101_REGP_168108.png

写法四:注意到,写法三中注释了一段代码,去掉注释会怎样?

var flag = true; var frameDom = $('iframe:eq(0)')[0]; $('button').on('click',function(){  if(flag){      try{     frameDom.contentWindow.document.write('');     frameDom.contentWindow.document.clear();     frameDom.contentWindow.close();       }catch(e){};            $('iframe:eq(0)').remove();      $('body').append("
");   flag = false;  }else{      try{     frameDom.contentWindow.document.write('');     frameDom.contentWindow.document.clear();     frameDom.contentWindow.close();       }catch(e){};            $('iframe:eq(0)').remove();      $('body').append("
");   flag = true;  } });

124420_35a3_168108.png

此写法与写法3并没有明显差别,每次切换#leaks仍然增加3左右

因此可以得出结论,最好的解决重置iframe地址内存泄露办法就是 把它干掉,再添加一个!

网传不一定靠谱啊

注:本机测试环境为 WIN7 x64 IE9

转载于:https://my.oschina.net/lldy/blog/375626

你可能感兴趣的文章
springboot部署
查看>>
python 笔记 之 函数初识
查看>>
正则介绍_grep
查看>>
【SpringBoot系列】SpringBoot注解详解
查看>>
编程开发学习笔记之程序员如何用1年时间获得3年成长(图)
查看>>
策略设计模式
查看>>
Guava 学习
查看>>
专访阿里视频云叔度:一场技术人的自我修行
查看>>
vue项目中,时间戳转化成时间
查看>>
且看大牛十分钟讲清楚区块链侧链技术
查看>>
面试阿里常被问到的十个 Java 面试题
查看>>
用Spring Boot颠覆Java应用开发
查看>>
深入源码分析Java线程池的实现原理
查看>>
使用java+TestNG进行接口回归测试
查看>>
读完这篇,让你真正理解Redis持久化
查看>>
Spring Boot 2.X 如何添加拦截器?
查看>>
人工智能让政务服务更有“温度”
查看>>
java第七天(this关键字、构造器、static静态关键字、单例模式)
查看>>
我在这个开源项目里找到了童年!
查看>>
Crontab的格式
查看>>