الإغلاق الذاتي المنبثقة في IE - كيفية الحصول على سلوك Onblur مناسب؟

StackOverflow https://stackoverflow.com/questions/735992

سؤال

أريد نافذة عابرة لإغلاق نفسها عند النقر فوق المستخدم بعيدا عنها. هذا يعمل ل Firefox:

var w = window.open(...);
dojo.connect(w, "onblur", w, "close");

لكن يبدو أنه يعمل في Internet Explorer. أشادت بعض المواقع الأخرى إلى حدث "OnFocusout" الخاص ب IE، لكن لم أتمكن من العثور على مثال عمل متماسك لما أحتاج إليه.

ماذا تقول تجاوز سعة المكدس عن أفضل طريقة للحصول على نوافذ متصفح IE لتغلق عند فقدان التركيز؟

أنا أستخدم Dojo، إذا كان هناك بعض الاختصار في تلك المكتبة، فستكون المعلومات موضع ترحيب. ستكون مكالمات IE القياسية خلاف ذلك هي أفضل إجابة.

هل كانت مفيدة؟

المحلول

أنا أحسب البديل في IE.

هذه:

        that.previewWindowAction = function () {
            var pw =
                window.open(this.link, "preview",
                            "height=600,width=1024,resizable=yes,"
                            + "scrollbars=yes,dependent=yes");
            dojo.connect(pw, "onblur", pw, "close");
        };

يجب أن تكون مكتوبة مثل هذا للعمل في IE:

        that.previewWindowAction = function () {
            var pw =
                window.open(this.link, "preview",
                            "height=600,width=1024,resizable=yes,"
                            + "scrollbars=yes,dependent=yes");
            if (dojo.isIE) {
                dojo.connect
                    (pw.document,
                     "onfocusin",
                     null,
                     function () {
                         var active = pw.document.activeElement;
                         dojo.connect
                             (pw.document,
                              "onfocusout",
                              null,
                              function () {
                                  if (active != pw.document.activeElement) {
                                      active = pw.document.activeElement;
                                  } else {
                                      window.open("", "preview").close();
                                  }
                              });
                     });

            }
            else {
                dojo.connect(pw, "onblur", pw, "close");
            }
        };

الأسباب؟

  • في IE، لا تستجيب كائنات النافذة لأحداث Blur. لذلك يجب علينا استخدام حدث OnFocusout الخاص.
  • في IE، يتم إرسال OnFocusout من قبل معظم عناصر HTML، لذلك يجب علينا إضافة بعض المنطق لتحديد أي onfocusout هو الوحدة الناجمة عن النافذة فقدان التركيز. في OnFocusout، تختلف سمة AraseElement الوثيقة دائما عن القيمة السابقة - إلا عندما تفقد النافذة نفسها التركيز. هذه هي جديلة لإغلاق النافذة.
  • في IE، ترسل المستندات في نافذة جديدة OnFocusout عند إنشاء النافذة لأول مرة. لذلك، يجب علينا فقط إضافة معالج OnFocusout بعد أن تم إحضاره إلى التركيز.
  • في IE، لا يبدو أن Window.Open لإرجاع مقبض النافذة بشكل موثوق عند إنشاء Windows New Windows. لذلك يجب علينا البحث عن النافذة بالاسم من أجل إغلاقه.

نصائح أخرى

يحاول:

document.onfocusout = window.close();

قد تحاول ذلك كجزء من كتلة التعليمات البرمجية IE:

w.onblur = function() { w.close();};
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top