Heim >Web-Frontend >js-Tutorial >Lösung für das Problem, dass der IFrame-Objektspeicher in IE browser_javascript skills nicht freigegeben wird

Lösung für das Problem, dass der IFrame-Objektspeicher in IE browser_javascript skills nicht freigegeben wird

WBOY
WBOYOriginal
2016-05-16 16:39:071755Durchsuche

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 Formular

Nachdem 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>
Aber beim Testen habe ich zwei Einschränkungen festgestellt:

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:

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn