เมื่อเร็ว ๆ นี้ทีมงานโครงการพบว่าหากวัตถุ IFRAME รวมอยู่ในแบบฟอร์มป๊อปอัพโดยใช้ showmodaldialog ทรัพยากรหน่วยความจำที่ครอบครองโดยวัตถุ IFRAME จะไม่ถูกปล่อยออกมาหลังจากปิดแบบฟอร์ม หลังจากปิดผุดขึ้นซ้ำหลายครั้งการใช้หน่วยความจำของเบราว์เซอร์ IE อาจเกินหลายร้อย M. ในกรณีที่รุนแรงเบราว์เซอร์ IE รายงานข้อผิดพลาดและไม่สามารถปิดได้ คุณสามารถรีสตาร์ทเบราว์เซอร์ได้โดยการฆ่ากระบวนการ หลังจากการทดสอบปัญหานี้ยังมีอยู่เมื่อโผล่ขึ้นมาโดยใช้วิธีการเปิด
ในเบราว์เซอร์ IE8 มีความแตกต่างในการใช้หน่วยความจำป๊อปอัปจาก Open และ ShowModaldialog:
แบบฟอร์มโผล่ขึ้นมาในวิธีการเปิดใช้งานกระบวนการ IExplorer.exe อิสระ
แบบฟอร์มที่โผล่ขึ้นมาในโหมด showmodaldialog ใช้กระบวนการ IExplorer.exe เดียวกันเป็นรูปแบบหลัก
หลังจากค้นหาฉันพบว่าการแก้ปัญหาคือการลบวัตถุ iframe ออกจากแบบฟอร์มก่อนที่แบบฟอร์มจะปิด รหัสมีดังนี้:
<span style = "font-size: 18px"> var el = document.getElementById ("scanif"); el.src = ""; el.contentwindow.document.write (''); el.contentwindow.document.clear (); var p = el.parentnode;อย่างไรก็ตามในระหว่างการทดสอบฉันพบว่ามีข้อ จำกัด สองประการ:
1. หาก EL.SRC ยังไม่ถูกดำเนินการคำสั่งต่อไปนี้จะถูกดำเนินการ หาก IFRAME มีเนื้อหาข้ามโดเมนจะแจ้งให้ทราบว่าไม่มีการอนุญาต
2. แบบฟอร์มปิดเร็วกว่าสคริปต์ถูกเรียกใช้งานและหน่วยความจำยังไม่ถูกปล่อยออกมา
หลังจากการแก้ไขสคริปต์สุดท้ายมีดังนี้:
<! doctype html public "-// w3c // dtd html 4.0 transitional // en"> <html> <head> <title> </title> <body onbeforeunload = "return loadhandler ();"> type = "text/javascript"> ฟังก์ชั่น unloadhandler (notip) {// ยกเลิกเหตุการณ์การฟังเมื่อหน้าต่างปิด document.getElementByTagname ("body") [0] .onbeforeferload = null; var el = document.getElementId ("scanif"); และหน้าต่างปัจจุบันจะปิดโดยอัตโนมัติ ";} ส่งคืนจริง;} ฟังก์ชั่น cycleclear () {ลอง {var el = document.getElementById (" scanif "); ถ้า (el) {el.contentwindow.document.write ('); el.parentNode; p.removeChild (el);} window.close ();} catch (e) {settimeout (cycleclear, 100);}} // window.onunload = unloadhandler; </script> <อินพุตประเภท = "ปุ่ม"