IE瀏覽器IFrame對(duì)象內(nèi)存不釋放問(wèn)題解決方法
最近項(xiàng)目組發(fā)現(xiàn)在使用showModalDialog彈出窗體中如果包含IFrame對(duì)象,則IFrame對(duì)象占用的內(nèi)存資源在窗體關(guān)閉后不會(huì)釋放。彈出關(guān)閉反復(fù)多次后,IE瀏覽器內(nèi)存占用可超過(guò)數(shù)百M(fèi),嚴(yán)重時(shí)IE瀏覽器報(bào)錯(cuò),且無(wú)法關(guān)閉,只能通過(guò)殺進(jìn)程的方式重啟瀏覽器。經(jīng)測(cè)試,使用open方式彈出也存在該問(wèn)題。
在IE8瀏覽器中,open和showModalDialog彈出的內(nèi)存占用有差異:
open方式彈出的窗體占用的是一個(gè)獨(dú)立的iexplorer.exe進(jìn)程;
showModalDialog方式彈出的窗體使用和父窗體相同的iexplorer.exe進(jìn)程;
經(jīng)過(guò)搜索,發(fā)現(xiàn)解決辦法是在窗體關(guān)閉前,從窗體中刪除IFrame對(duì)象,代碼如下:
<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>
但是測(cè)試的時(shí)候,發(fā)現(xiàn)有兩個(gè)限制:
1. el.src可能還沒(méi)有執(zhí)行完,就執(zhí)行后面的語(yǔ)句,如果IFrame中包含的是跨域內(nèi)容,則會(huì)提示沒(méi)有權(quán)限;
2. 窗體關(guān)閉的比腳本執(zhí)行的快,內(nèi)存仍然沒(méi)有釋放;
經(jīng)過(guò)修改,最終腳本如下:
<!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)閉時(shí)的監(jiān)聽(tīng)事件
document.getElementsByTagName("BODY")[0].onbeforeunload = null;
var el = document.getElementById("scanIf");
if (el) {
el.src = "";
setTimeout(cycleClear, 100);
return "提示:請(qǐng)點(diǎn)擊取消按鈕,當(dāng)前窗口會(huì)自動(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)文章
JavaScript判斷輸入是否為整數(shù)的正則表達(dá)式
這篇文章主要介紹了JavaScript判斷輸入是否為整數(shù)的正則表達(dá)式,用于驗(yàn)證不同類型的數(shù)據(jù),包括數(shù)字、字符、電子郵件、網(wǎng)址、身份證號(hào)、手機(jī)號(hào)碼等,每個(gè)模式都提供了詳細(xì)的正則表達(dá)式和匹配說(shuō)明,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-04-04
JavaScript中檢測(cè)數(shù)據(jù)類型的四種方法
這篇文章主要給大家分享的是JavaScript中檢測(cè)數(shù)據(jù)類型的四種方法,有 typeof、instanceof、constructor、Object.prototype.toString.call(),下面文章詳細(xì)介紹內(nèi)容,需要的小伙伴可以參考一下2022-01-01
Array棧方法和隊(duì)列方法的特點(diǎn)說(shuō)明
本篇文章主要是對(duì)Array棧方法與隊(duì)列方法的特點(diǎn)進(jìn)行了詳細(xì)的說(shuō)明介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-01-01
用JS提交參數(shù)創(chuàng)建form表單在FireFox中遇到的問(wèn)題
在一個(gè)前端頁(yè)面上,需要通過(guò)JavaScript來(lái)提交參數(shù),使用JS創(chuàng)建form表單,將參數(shù)append到表單中進(jìn)行提交,接下來(lái)將介紹如何操作與實(shí)現(xiàn)2013-01-01
JS實(shí)現(xiàn)的新浪微博大廳文字內(nèi)容滾動(dòng)效果代碼
這篇文章主要介紹了JS實(shí)現(xiàn)的新浪微博大廳文字內(nèi)容滾動(dòng)效果代碼,可實(shí)現(xiàn)頁(yè)面圖文元素定時(shí)滾動(dòng)的效果,涉及JavaScript時(shí)間函數(shù)定時(shí)改變頁(yè)面元素的相關(guān)技巧,需要的朋友可以參考下2015-11-11
3分鐘教你用JavaScript實(shí)現(xiàn)電子簽名效果
電子簽名已經(jīng)成為現(xiàn)代商業(yè)中不可或缺的一部分,它可以提高業(yè)務(wù)流程的效率和安全性。本文將介紹如何使用HTML5的canvas元素和JavaScript在前端實(shí)現(xiàn)電子簽名,需要的可以參考一下2023-04-04
js數(shù)字滑動(dòng)時(shí)鐘的簡(jiǎn)單實(shí)現(xiàn)(示例講解)
下面小編就為大家?guī)?lái)一篇js數(shù)字滑動(dòng)時(shí)鐘的簡(jiǎn)單實(shí)現(xiàn)(示例講解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08
JavaScript實(shí)現(xiàn)簡(jiǎn)單驗(yàn)證碼
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)簡(jiǎn)單驗(yàn)證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-08-08

