في الآونة الأخيرة ، وجد فريق المشروع أنه إذا تم تضمين كائن 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 ('') ؛ومع ذلك ، أثناء الاختبار ، وجدت أن هناك قيودًا:
1. إذا لم يتم تنفيذ EL.SRC بعد ، فسيتم تنفيذ البيان التالي. إذا كان IFRAME يحتوي على محتوى عبر المجال ، فسيطلب من عدم وجود إذن ؛
2. تم إغلاق النموذج بشكل أسرع من تنفيذ البرنامج النصي ، ولا تزال الذاكرة غير مصورة ؛
بعد التعديل ، يكون النص النهائي كما يلي:
<! doctype html public "-// w3c // dtd html 4.0 transitional // en"> <html> <head> <title> </title> <body onBeforeUnload = "return unloadhandler () ؛" <frame id = "scanif" src = type = "text/javaScript"> وظيفة unloadhandler (notip) {// إلغاء حدث الاستماع عند إغلاق النافذة. سيتم إغلاق النافذة الحالية تلقائيًا. "؛ el.parentnode ؛ p.removechild (el) ؛} window.close () ؛} catch (e) {setTimeOut (cycleclear ، 100) ؛}} // window.onunload = unloadhandler ؛ </script> <input type = "button" value = "remove