最近、プロジェクト チームは、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>
1. el.src はまだ実行されていない可能性があり、IFrame にクロスドメイン コンテンツが含まれている場合は、権限がないことを示すプロンプトが表示されます。
2. フォームはスクリプトの実行よりも早く閉じられますが、メモリはまだ解放されていません。
変更後の最終的なスクリプトは次のようになります: