IE瀏覽器IFrame對象內(nèi)存不釋放問題解決方法
最近項目組發(fā)現(xiàn)在使用showModalDialog彈出窗體中如果包含IFrame對象,則IFrame對象占用的內(nèi)存資源在窗體關(guān)閉后不會釋放。彈出關(guān)閉反復(fù)多次后,IE瀏覽器內(nèi)存占用可超過數(shù)百M(fèi),嚴(yán)重時IE瀏覽器報錯,且無法關(guān)閉,只能通過殺進(jìn)程的方式重啟瀏覽器。經(jīng)測試,使用open方式彈出也存在該問題。
在IE8瀏覽器中,open和showModalDialog彈出的內(nèi)存占用有差異:
open方式彈出的窗體占用的是一個獨(dú)立的iexplorer.exe進(jìn)程;
showModalDialog方式彈出的窗體使用和父窗體相同的iexplorer.exe進(jìn)程;
經(jīng)過搜索,發(fā)現(xiàn)解決辦法是在窗體關(guān)閉前,從窗體中刪除IFrame對象,代碼如下:
<span style="font-size:18px"> var el = document.getElementById("scanIf"); el.src=""; el.contentWindow.document.write(''); el.contentWindow.document.clear(); var p = el.parentNode; p.removeChild(el); </span>
但是測試的時候,發(fā)現(xiàn)有兩個限制:
1. el.src可能還沒有執(zhí)行完,就執(zhí)行后面的語句,如果IFrame中包含的是跨域內(nèi)容,則會提示沒有權(quán)限;
2. 窗體關(guān)閉的比腳本執(zhí)行的快,內(nèi)存仍然沒有釋放;
經(jīng)過修改,最終腳本如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD><TITLE></TITLE> <BODY onbeforeunload="return unloadHandler();"> <IFRAME id="scanIf" width="800px" height="600px" src = "http://www.baidu.com"></IFRAME> <SCRIPT type="text/javascript"> function unloadHandler(notip) { // 取消窗口關(guān)閉時的監(jiān)聽事件 document.getElementsByTagName("BODY")[0].onbeforeunload = null; var el = document.getElementById("scanIf"); if (el) { el.src = ""; setTimeout(cycleClear, 100); return "提示:請點(diǎn)擊取消按鈕,當(dāng)前窗口會自動關(guān)閉。"; } return true; } function cycleClear() { try { var el = document.getElementById("scanIf"); if (el) { el.contentWindow.document.write(''); el.contentWindow.document.clear(); var p = el.parentNode; p.removeChild(el); } window.close(); } catch (e) { setTimeout(cycleClear, 100); } } //window.onunload = unloadHandler; </SCRIPT> <input type="button" value="remove" onclick="unloadHandler();"> </BODY></HTML>
相關(guān)文章
IE和Firefox的Javascript兼容性總結(jié)[推薦收藏]
長久以來JavaScript兼容性一直是Web開發(fā)者的一個主要問題。在正式規(guī)范、事實標(biāo)準(zhǔn)以及各種實現(xiàn)之間的存在的差異讓許多開發(fā)者日夜煎熬2011-10-10每天一篇javascript學(xué)習(xí)小結(jié)(Function對象)
這篇文章主要介紹了javascript中的Function對象知識點(diǎn),對Function對象的基本使用方法,以及各種方法進(jìn)行整理,感興趣的小伙伴們可以參考一下2015-11-11JavaScript插入動態(tài)樣式實現(xiàn)代碼
能夠把CSS樣式包含到HTML頁面中的元素有兩個。其中,<link>元素用于包含來自外部的文件,而<style>元素用于指定嵌入的樣式2012-02-02layui的表單驗證支持ajax判斷用戶名是否重復(fù)的實例
今天小編就為大家分享一篇layui的表單驗證支持ajax判斷用戶名是否重復(fù)的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09js實現(xiàn)有過渡漸變效果的圖片輪播相冊(兼容IE,ff)
這篇文章主要介紹了js實現(xiàn)有過渡漸變效果的圖片輪播相冊,兼容IE、ff,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-01-01JavaScript實現(xiàn)把數(shù)字轉(zhuǎn)換成中文
這篇文章主要介紹了JavaScript實現(xiàn)把數(shù)字轉(zhuǎn)換成中文,本文直接給出實例代碼,需要的朋友可以參考下2015-06-06Extjs顯示從數(shù)據(jù)庫取出時間轉(zhuǎn)換JSON后的出現(xiàn)問題
后臺從數(shù)據(jù)庫取出時間,JSON格式化后再傳到gridpanel,這時時間變成了:/Date(32331121223)/這樣的格式,本文將詳細(xì)介紹解決Extjs顯示從數(shù)據(jù)庫取出時間轉(zhuǎn)換JSON后的出現(xiàn)問題2012-11-11