Недавно команда проекта обнаружила, что если объект iframe включен в всплывающую форму с использованием ShowModaldialog, ресурсы памяти, занятые объектом iframe, не будут выпущены после закрытия формы. После того, как всплывающее окно повторяется много раз, использование памяти браузера IE может превышать сотни M. В серьезных случаях браузер IE сообщает об ошибке и не может быть закрыт. Вы можете перезапустить браузер, только убив процесс. После тестирования эта проблема также существует при выступлении с использованием открытого метода.
В браузере 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.RemovInd (el);Однако во время теста я обнаружил, что было два ограничения:
1. Если El.SRC еще не может быть выполнен, будет выполнено следующее оператор. Если IFRAME содержит контент поперечного домена, это заставит, чтобы разрешение не было;
2. Форма закрыта быстрее, чем выполняется сценарий, и память до сих пор не выпущена;
После модификации последний сценарий заключается в следующем:
<! Doctype html public "-// w3c // dtd html 4.0 transitional // en"> <html> <head> <title> </title> <body onbeforeUnload = "return unductionHandler ();"> <iframe id = "scanif" src = "http://www.baid type = "text/javascript"> функция Unloadhandler (notip) {// Отменить событие прослушивания, когда окно закрыто Document.GetElementsBytagName ("Body") [0] .OnbeforeUnload = null; var el = document.getElementbyId ("scanif"); если (el) {el.src = ";" setTimeout ("cyclecelece wipelece: eL -wriefel: glieLecel: 100); и текущее окно закроется автоматически. ";} 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 = "value =" onclick = "Unloadhandler ();> </body> </html>