Recentemente, a equipe do projeto constatou que, se o objeto iframe estiver incluído no formulário pop-up usando o showModaldialog, os recursos de memória ocupados pelo objeto iframe não serão liberados após o fechamento do formulário. Depois que o fechamento pop-up é repetido muitas vezes, o uso de memória do navegador do IE pode exceder centenas de M. em casos graves, o navegador do IE relata um erro e não pode ser fechado. Você só pode reiniciar o navegador matando o processo. Após o teste, esse problema também existe ao aparecer usando o método aberto.
No navegador IE8, há uma diferença nos pop -ups de uso da memória do Open e ShowModaldialog:
O formulário apareceu no método aberto ocupa um processo independente iexplorer.exe;
O formulário apareceu no modo ShowModaldialog usa o mesmo processo iexplorer.exe que o formulário pai;
Após a pesquisa, descobri que a solução é excluir o objeto iframe do formulário antes que o formulário seja fechado. O código é o seguinte:
<span style = "font-size: 18px"> var el = document.getElementById ("scanif"); el.src = ""; el.contentwindow.document.write (''); el.contentWindow.document.clear (); var p = el.parentNode;No entanto, durante o teste, descobri que havia duas limitações:
1. Se o EL.SRC ainda não for executado, a seguinte declaração será executada. Se o iframe contiver conteúdo de domínio cruzado, ele solicitará que não haja permissão;
2. O formulário está fechado mais rápido que o script é executado e a memória ainda não é liberada;
Após a modificação, o script final é o seguinte:
<! Doctype html public "-// w3c // dtd html 4.0 transitório // pt"> <html> <head> <title> </title> <corpo onBeforeunload = "return uplarloadHandler ();"> <ifram ID = "scanf" src = "httph./); type = "text/javascript"> function uplarloadHandler (notip) {// Cancele o evento de escuta quando a janela estiver fechada document.getElementsByTagName ("Body") [0] .onBeforeUnload = null; var el = document.getElementById ("scanf"); if (el), el.Src = "; e a janela atual fechará automaticamente. ";} retornar TRUE;} função cicleClear () {try {var el = document.getElementById (" scanif "); if (el) {el.contentWindow.document.write (''); el.contentwindow.document.clear (var (' el.parentNode; p.RemoVechild (el);} window.close ();} catch (e) {setTimeout (Cycleclear, 100);}} // window.onunload = UNLOARLOUNDHANDLER; </script> <input Type = "Buttle" = "Remover"/"OnClick =" UNLOARHANDLER ();