Kürzlich stellte das Projektteam fest, dass die Speicherressourcen, die vom IFrame-Objekt besetzt sind, nach Abschluss des Formulars nicht veröffentlicht werden, wenn das IFrame-Objekt mithilfe von ShowModaldialog in das Popup-Formular enthalten ist. Nachdem die Popup-Schließung um ein Vielfaches wiederholt wurde, kann der Speicherverbrauch des IE-Browsers Hunderte von M. in schweren Fällen überschreiten, der IE-Browser meldet einen Fehler und kann nicht geschlossen werden. Sie können den Browser nur neu starten, indem Sie den Prozess töten. Nach dem Testen existiert auch dieses Problem, wenn Sie mit der offenen Methode auftauchen.
Im IE8 -Browser gibt es einen Unterschied in den Speicherverwendungspopups von Open und ShowModaldialog:
Das in der offene Methode angezeigte Form ist ein unabhängiger iExplorer.exe -Prozess;
Das im Showmodaldialog -Modus angezeigte Formular verwendet denselben iExplorer.exe -Prozess wie die übergeordnete Form.
Nach der Suche stellte ich fest, dass die Lösung darin besteht, das Iframe -Objekt aus dem Formular zu löschen, bevor das Formular geschlossen ist. Der Code ist wie folgt:
<span style = "font-size: 18px"> var el = document.getElementById ("scanif"); el.src = ""; El.ContentWindow.document.write ('');Während des Tests stellte ich jedoch fest, dass es zwei Einschränkungen gab:
1. Wenn EL.SRC noch nicht ausgeführt werden darf, wird die folgende Erklärung ausgeführt. Wenn der Iframe Cross-Domänen-Inhalt enthält, wird auffordern, dass keine Erlaubnis besteht.
2. Das Formular ist schneller geschlossen als das Skript ausgeführt wird, und der Speicher wird immer noch nicht veröffentlicht.
Nach der Änderung lautet das endgültige Skript wie folgt:
<! DocType html public "-// w3c // dtd html 4.0 transitional // en"> <html> <kopf> <titels> </title> <body onbeforeUload = "return unloadHandler (); type = "text/javaScript"> Funktion EntlowHandler (Notip) {// Das Hörereignis abbrechen, wenn das Fenster geschlossen ist. Das Fenster schließt automatisch. ";} return true;} Funktion cycleclear () {try {var el = document.getElementById (" scanif "); if (el) {el.contentWindow.document.write (''); El.ContentWindow.document El.Parentnode; P.Removechild (el);} window.close ();} catch (e) {setTimeout (cycleclear, 100);}} // window.onunload = unloadHandler; </script> <Eingabe type = "button" value = "entryHandler ();