Recientemente, el equipo del proyecto descubrió que si el objeto iframe se incluye en el formulario emergente utilizando showmodaldialog, los recursos de memoria ocupados por el objeto iframe no se lanzarán después de que se cierre el formulario. Después de que el cierre emergente se repite muchas veces, el uso de memoria del navegador IE puede exceder los cientos de M. En casos severos, el navegador IE informa un error y no puede cerrarse. Solo puedes reiniciar el navegador matando el proceso. Después de las pruebas, este problema también existe al aparecer utilizando el método abierto.
En el navegador IE8, hay una diferencia en las ventanas emergentes de uso de la memoria de Open y ShowModaldialog:
El formulario apareció en el método abierto ocupa un proceso independiente iExplorer.exe;
El formulario apareció en el modo showModaldialog utiliza el mismo proceso iExplorer.exe que la forma principal;
Después de buscar, descubrí que la solución es eliminar el objeto iframe del formulario antes de que se cierre el formulario. El código es el siguiente:
<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); </spanSin embargo, durante la prueba, descubrí que había dos limitaciones:
1. Si el.src aún no se ejecuta, se ejecutará la siguiente declaración. Si el iframe contiene contenido de dominio cruzado, solicitará que no hay permiso;
2. El formulario está cerrado más rápido de lo que se ejecuta el script, y la memoria aún no se libera;
Después de la modificación, el script final es el siguiente:
<! Doctype html public "-// w3c // dtd html 4.0 type = "text/javascript"> function unloadHandler (Notip) {// Cancelar el evento de escucha cuando la ventana está cerrada document.getElementsByTagName ("Body") [0] .OnbeForeUnload = null; var El = document.getElementById ("scanif"); if (el) {el.src = "; setTimeOut (cycleclear, 100); return"; La ventana se cerrará automáticamente. ";} 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 = "eliminar" onClick = "descarado ();"> </body> </html>