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技術分享

相關文章
相關標籤/搜索