easyui中jquery重复引用问题(tab内存泄露问题)

今天认真测试了下easyui的一些兼容性问题,发如今ie9 ie10 首次加载的时候,会出现以下bug。如图所示:jquery

11

认真看了下,我估计是脚本重复引用的问题,我用的iframe框架的模式。登录系统后,桌面首页也加载了一样的jquery的脚本。web

后来,我把加载首页的代码加了1毫秒的延迟,问题就解决了。代码以下:app

 

setTimeout(function () {
            $("#tabs").tabs('add', {
                title: '我的桌面',
                content: createFrameByTab('/home/desktop.aspx'),
                iconCls: 'home'
            });
}, 1);框架

 

 

如今想一想也有多是tab内存泄露的问题。具体怎么解决呢?函数

 

easyui源码:测试

tab.panel("options").tab.remove();
//新增
var frame = $('iframe',tab);
     if(frame.length>0){
           frame[0].contentWindow.document.write('');
           frame[0].contentWindow.close();
           frame.attr('src', "about:blank");
           frame.remove();
     }
//
tab.panel("destroy");ui

 

参考:插件

IE9下用jquery tabs ,easyui tabs  等报SCRIPT5009错误
最近在作一个项目时用到了Jquery UI Tabs这个插件,在添加新标签时手工往tabs append了iframe页面,而后在iframe里用$("#tab").tabs('remove', selectedindex);方法移除标签时,IE9就会报SCRIPT5009错误,错误代码指向jquery.js 6784行,报“isNaN” 未定义,isNaN是JS原生函数,怎么会未定义呢?通过一番研究,终于发现了原来是iframe惹的祸,缘由是IE在iframe元素的回收方面存在着bug,在一般状况下应该将该元素的src属性值修改成”abort:blank”,并手工将其从DOM树上移除,否则会形成内存泄露。打开jquery tabs的源码发现,Tabs插件在remove标签时直接将DIV panels移除,并无对iframe作相应的处理,而iframe是div panels的子元素,直接删除就会形成上述的问题,因而修改源码加入如下代码:ip

var ifrm = panls.find("iframe"); //首先查找iframe
 
  if( ifrm.length > 0){//有iframe时
 
   var el = ifrm.get(0);
 
   el.contentWindow.document.write('');//清空iframe的内容
 
   el.contentWindow.close();//避免iframe内存泄漏
 
   ifrm.attr('src', "about:blank");
 
   ifrm.remove();
 
  }
 
问题 解决:)内存

web技术分享

相关文章
相关标签/搜索