`
dawuafang
  • 浏览: 1107553 次
文章分类
社区版块
存档分类
最新评论

easyui tabs组件关闭tab时释放iframe占用内存

 
阅读更多

EasyUI的Tabs,如果你在Tab中使用了<iframe>显示Tab页面内容,在关闭Tab后,iframe所占用的内存并不能得到释放,直到浏览器关闭。当Tab操作得越多,内存占用就越大,随时都会令浏览器内存溢出,你就不得不希望能通过限制Tab的打开数量来改善这种状况。但要注意,关闭后的Tab并没有释放iframe所占用的内存,只是简单地限制同时打开的Tab数量效果似乎是太理想的。很多人为这个问题而烦恼。下面给出一个更有效地释放Tab所占用内存的解决方法For EasyUI 1.2.5:

if (你使用的是未经压缩的EasyUI)

{

打开jquery.easyui.js,搜索“panel("options").tab.remove();”,在该语句后面插入下面代码,保存即可:

var frame=$('iframe', tab);if(frame.length>0){frame[0].contentWindow.document.write('');frame[0].contentWindow.close();frame.remove();if($.browser.msie){CollectGarbage();}}

}

else

{

打开jquery.easyui.min.js,搜索“panel("options").tab.remove();”,在该语句后面插入下面代码,保存即可:

var frame=$('iframe', i);if(frame.length>0){frame[0].contentWindow.document.write('');frame[0].contentWindow.close();frame.remove();if($.browser.msie){CollectGarbage();}}

}

---------------------------------------------

注意:

1、本解决方法,仅针对EasyUI 1.2.5!!

2、有一个地方可能你需要自行修改。举例:
var frame=$('iframe', i);
该句中的第二个参数i,跟搜索到的panel("options").tab.remove();前面的对象变量同名,有可能你压缩的文档在压缩后,不是i.panel("options").tab.remove();而是其它变量名。请自行替换一下这里的参数名即可。

也可以重写panel的beforeDestroy事件实现,把如下代码添加到easyui的最后即可

$.fn.panel.defaults.onBeforeDestroy = function() {/* 回收内存 */
var frame = $('iframe', this);
if (frame.length > 0) {
frame[0].contentWindow.document.write('');
frame[0].contentWindow.close();
frame.remove();
if ($.browser.msie) {
CollectGarbage();
}
}
};

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics