Kürzlich hat das Projektteam festgestellt, dass, wenn das Popup-Formular, das showModalDialog verwendet, ein IFrame-Objekt enthält, die vom IFrame-Objekt belegten Speicherressourcen nach dem Schließen des Formulars nicht freigegeben werden. Nachdem das Popup und das Schließen viele Male wiederholt wurden, kann der vom IE-Browser belegte Speicher Hunderte von MB überschreiten. In schweren Fällen meldet der IE-Browser einen Fehler und kann nicht geschlossen werden. Die einzige Möglichkeit, den Browser neu zu starten, besteht darin, ihn zu beenden der Prozess. Nach dem Test besteht dieses Problem auch, wenn zum Popup die Open-Methode verwendet wird.
Im IE8-Browser gibt es einen Unterschied in der Speichernutzung zwischen open- und showModalDialog-Popups:
Das im geöffneten Modus angezeigte Formular belegt einen unabhängigen iexplorer.exe-Prozess;
Das von showModalDialog angezeigte Formular verwendet denselben iexplorer.exe-Prozess wie das übergeordnete FormularNachdem ich gesucht habe, habe ich herausgefunden, dass die Lösung darin besteht, das IFrame-Objekt vor dem Schließen des Formulars zu löschen. Der Code lautet wie folgt:
<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 wird möglicherweise noch nicht ausgeführt und die folgenden Anweisungen werden ausgeführt. Wenn der IFrame domänenübergreifende Inhalte enthält, wird angezeigt, dass keine Berechtigung vorliegt
2. Das Formular wird schneller geschlossen, als das Skript ausgeführt wird, und der Speicher wird immer noch nicht freigegeben
Nach der Änderung lautet das endgültige Skript wie folgt: