欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

IE瀏覽器IFrame對象內(nèi)存不釋放問題解決方法

 更新時間:2014年08月22日 10:00:07   投稿:whsnow  
IFrame對象占用的內(nèi)存資源在窗體關(guān)閉后不會釋放。彈出關(guān)閉反復(fù)多次后,IE瀏覽器內(nèi)存占用可超過數(shù)百M(fèi),嚴(yán)重時IE瀏覽器報錯

最近項目組發(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)文章

最新評論