Récemment, l'équipe du projet a constaté que si l'objet IFRAME est inclus dans le formulaire contextuel à l'aide de ShowModaldialog, les ressources de mémoire occupées par l'objet Iframe ne seront pas publiées après la fermeture du formulaire. Une fois la fermeture pop-up à plusieurs reprises, l'utilisation de la mémoire du navigateur IE peut dépasser des centaines de M. dans des cas graves, le navigateur IE signale une erreur et ne peut pas être fermé. Vous ne pouvez redémarrer le navigateur qu'en tuant le processus. Après les tests, ce problème existe également lors de l'appartenance à l'aide de la méthode ouverte.
Dans le navigateur IE8, il y a une différence dans les fenêtres d'utilisation de la mémoire d'Open et ShowModaldialog:
Le formulaire est apparu dans la méthode ouverte occupe un processus indépendant iexplorer.exe;
Le formulaire est apparu en mode ShowModaldialog utilise le même processus iExplorer.exe que la forme parent;
Après la recherche, j'ai constaté que la solution consiste à supprimer l'objet iframe du formulaire avant la fermeture du formulaire. Le code est le suivant:
<span style = "font-size: 18px"> var el = document.getElementById ("Scanif"); el.src = ""; el.contentwindow.document.write (''); el.contentwindow.Document.clear (); var p = el.parentNode;Cependant, pendant le test, j'ai constaté qu'il y avait deux limites:
1. Si El.Src ne peut pas encore être exécuté, l'instruction suivante sera exécutée. Si l'IFRAME contient du contenu inter-domaine, il invite qu'il n'y ait pas d'autorisation;
2. Le formulaire est fermé plus rapidement que le script est exécuté, et la mémoire n'est toujours pas publiée;
Après modification, le script final est le suivant:
<! Doctype html public "- // w3c // dtd html 4.0 transitional // en"> <html> <adhead> <title> </ title> <body onBeforeunLoad = "return unloadhandler ();"> <iframe id = "Scanif" src = "http://www.baid.com"> </ iframe> Type = "Text / JavaScript"> Fonction UnloadHandler (notip) {// Annuler l'événement d'écoute lorsque la fenêtre est fermée Document.GetElementsByTagName ("Body") [0] .onbeforeunLoad = null; var el = document.getElementByid ("Scanif"); if (el) {el.src = "; La fenêtre se fermera automatiquement. ";} return true;} fonction cycleClear () {try {var el = document.getElementById (" Scanif "); if (el) {el.contentwindow.Document.write (''); el.contentwindow.Document.Cuments.write; el.parentNode; p.RemoveChild (el);} window.close ();} catch (e) {setTimeout (cycleClear, 100);}} // window.onunload = un chargedhandler; </ script> <entrée = "bouton" value = "retire" onclick = "unpothandler ();"> </ody> </html>