ホームページ  >  記事  >  ウェブフロントエンド  >  IEブラウザでIFrameオブジェクトのメモリが解放されない問題の解決策_JavaScriptスキル

IEブラウザでIFrameオブジェクトのメモリが解放されない問題の解決策_JavaScriptスキル

WBOY
WBOYオリジナル
2016-05-16 16:39:071729ブラウズ

最近、プロジェクト チームは、showModalDialog を使用するポップアップ フォームに IFrame オブジェクトが含まれている場合、フォームが閉じられた後も IFrame オブジェクトによって占有されているメモリ リソースが解放されないことを発見しました。ポップアップと終了が何度も繰り返されると、IE ブラウザが占有するメモリが数百 MB を超える場合があり、IE ブラウザはエラーを報告して閉じることができなくなります。ブラウザを再起動する唯一の方法があります。プロセス。テスト後、この問題は、open メソッドを使用してポップアップする場合にも発生します。

IE8 ブラウザでは、open ポップアップと showModalDialog ポップアップの間にメモリ使用量に違いがあります:

オープン モードでポップアップするフォームは、独立した iexplorer.exe プロセスを占有します。

showModalDialog によってポップアップされるフォームは、親フォームと同じ iexplorer.exe プロセスを使用します。

検索した結果、フォームを閉じる前にフォームから 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>
しかし、テスト中に次の 2 つの制限があることがわかりました。

1. el.src はまだ実行されていない可能性があり、IFrame にクロスドメイン コンテンツが含まれている場合は、権限がないことを示すプロンプトが表示されます。

2. フォームはスクリプトの実行よりも早く閉じられますが、メモリはまだ解放されていません。

変更後の最終的なスクリプトは次のようになります:

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。