1. 程式人生 > >動態建立IFRAME載入方法和記憶體釋放

動態建立IFRAME載入方法和記憶體釋放

1.document.createElement("IFRAME")後不要設定src屬性,應先註冊IFRAME的onload事件,然後把IFRAME新增到容器中

2.設定計數器變數,預設值為0,在onload方法中檢查計數器是否為0,如果為0則設定src屬性(會再次觸發IFRAME onload事件),然後計數加1

3.在IFRAME onload事件中判斷計數後檢查IFRAME src是否為nul,如果是則釋放IFRAME

4.在IFRAME onload事件最後正常處理的程式碼

5.要釋放IFRAME時,只要把src設定為null即可自動釋放

示例:

var $iframe = $(doc.createElement("IFRAME"));
$iframe.attr("frameborder", 0);
$iframe.attr("scrolling", undefined === scrolling ? "no" : scrolling);
$iframe.css("width", "100%");
$iframe.css("height", "100%"); 

var msie = /msie/.test(navigator.userAgent.toLowerCase());  /*jQuery1.9以上版本檢測是否為IE瀏覽器*/
 var iframeInfo = { $iframe: $iframe, msie: msie, count: 0 };  /*count為計數器,必須使用物件引用再第二次載入時數值才有效*/
                $iframe.on("load", iframeInfo, function (e) {
                    if (0 == e.data.count) {                                        /*檢查是否為首次載入*/
                        e.data.$iframe.contents().empty();
                        e.data.$iframe.attr("src", "user.htm");
                        ++e.data.count;
                        return;
                    }               
                    if (null == e.data.$iframe.attr("src")) {               /*檢查是否為釋放iframe*/
                        e.data.$iframe.contents().empty();
                        e.data.$iframe.removeAttr('src');
                        e.data.$iframe.remove();
                        if (e.data.msie)
                            CollectGarbage();
                        e.data.$popupdlg.wijdialog("close");          ///這一句可選,這裡是關閉對話方塊
                        return;
                    }
                /*IE會執行兩次*/
                if (e.data.msie && 1 == e.data.count) {
                    ++e.data.count;
                    return;
                }

			/*最後才是正常處理的程式碼,根據實際需要編寫程式碼*/
                    var $divContainer = $(e.data.$iframe[0].contentWindow.document.getElementById("divContainer"));
                    $divContainer.show();                
                });