Baru-baru ini, tim proyek menemukan bahwa jika objek iframe termasuk dalam formulir pop-up menggunakan showmodaldialog, sumber daya memori yang ditempati oleh objek iframe tidak akan dirilis setelah formulir ditutup. Setelah penutupan pop-up diulang berkali-kali, penggunaan memori browser IE dapat melebihi ratusan M. dalam kasus yang parah, browser IE melaporkan kesalahan dan tidak dapat ditutup. Anda hanya dapat memulai kembali browser dengan membunuh prosesnya. Setelah pengujian, masalah ini juga ada saat bermunculan menggunakan metode terbuka.
Di browser IE8, ada perbedaan dalam popup penggunaan memori dari Open dan Showmodaldialog:
Formulir muncul dalam metode terbuka menempati proses IExplorer.exe independen;
Bentuk muncul dalam mode showmodaldialog menggunakan proses iexplorer.exe yang sama dengan bentuk induk;
Setelah mencari, saya menemukan bahwa solusinya adalah menghapus objek iframe dari formulir sebelum formulir ditutup. Kodenya adalah sebagai berikut:
<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.remoVuldow.document.clear (); var p = el.parentnode; p.remoVuldow.document.clear (); var p = el.parentnode; p.remoVuldowNamun, selama tes, saya menemukan bahwa ada dua batasan:
1. Jika EL.Src mungkin belum dieksekusi, pernyataan berikut akan dieksekusi. Jika iframe berisi konten lintas domain, itu akan meminta bahwa tidak ada izin;
2. Formulir ditutup lebih cepat dari skrip dieksekusi, dan memori masih belum dirilis;
Setelah modifikasi, skrip terakhir adalah sebagai berikut:
<! Doctype html public "-// w3c // dtd html 4.0 transitional // en"> <html> <head> <itement> </title> <body onbeforeunload = "return unloadHandler ();"> <iframe id = "scanif" src = "http://///iframe =" scanif "src =" http:) type = "Text/JavaScript"> Function UnloadHandler (NOTIP) {// Batalkan acara mendengarkan ketika jendela ditutup dokumen.getElementsbyTagname ("body") [0] .onbeforeunload = null; var el = document.getElementById ("scanif"); if (el) {el.src = "; Jendela saat ini akan ditutup secara otomatis. ";} return true;} function cycleclear () {coba {var el = document.geteLementById (" scanif "); if (el) {el.contentwindow.document.write (''); el.contentwindow.document.clear (); var p = '); el.parentnode; p.removechild (el);} window.close ();} catch (e) {setTimeOut (cycleclear, 100);}} // window.onunload = UploadHandler; </script> <input type = "tombol" value = "hapus" ontlick = "unloadHandler ();"