최근 프로젝트 팀은 Showmodaldialog를 사용하여 iframe 객체가 팝업 양식에 포함되면 Iframe 객체가 차지하는 메모리 리소스가 양식이 닫힌 후에 해제되지 않음을 발견했습니다. 팝업 닫기가 여러 번 반복 된 후, IE 브라우저의 메모리 사용량은 수백 M을 초과 할 수 있습니다. 심각한 경우 IE 브라우저는 오류를보고하고 닫을 수 없습니다. 프로세스를 죽임으로써 브라우저를 다시 시작할 수 있습니다. 테스트 후,이 문제는 열린 메소드를 사용하여 팝업 할 때도 존재합니다.
IE8 브라우저에서는 Open 및 Showmodaldialog의 메모리 사용 팝업에 차이가 있습니다.
열린 방법에서 팝업 된 양식은 독립적 인 explorer.exe 프로세스를 차지합니다.
Showmodaldialog 모드에서 팝업 된 양식은 동일한 IExplorer.exe 프로세스를 부모 양식과 사용합니다.
검색 후 솔루션은 양식이 닫히기 전에 양식에서 iframe 객체를 삭제하는 것임을 알았습니다. 코드는 다음과 같습니다.
<span style = "font-size : 18px"> var el = docum
그러나 시험 중에는 두 가지 한계가 있음을 발견했습니다.
1. EL.SRC가 아직 실행되지 않을 경우 다음 명령문이 실행됩니다. iframe에 크로스 도메인 컨텐츠가 포함 된 경우 허가가 없음을 알려줍니다.
2. 양식은 스크립트가 실행되는 것보다 빠르게 닫히고 메모리는 여전히 해제되지 않습니다.
수정 후 최종 스크립트는 다음과 같습니다.
<! docType html public "-// w3c // dtd html 4.0 transitional // en"> <html> <head> <title> </title> <body onbeforeunload = "return unloadhandler ();"> <iframe id = "scanif"src = "http://www.baidu.com"> type = "text/javaScript"> function unloadhandhandler (notip) {// 창이 닫을 때 청취 이벤트를 취소하십시오. 문서. ";} true;} function cycleclear () {try {var el = document.getElementById ("scanif "); if (el) {el) {el) {el.contentWindow.document.clear (); var p = el.parentNode; p.remov child (}); (e) {settimeout (cycleclear, 100);}} // wind