1. 程式人生 > >easyui tabs元件關閉tab時釋放iframe佔用記憶體

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();
        }
    }
};