Frage

Ich möchte ein vorübergehendes Fenster selbst zu schließen, wenn der Benutzer weg klickt davon. Dies funktioniert für Firefox:

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

, aber es scheint nicht in Internet Explorer zu arbeiten. Einige andere Seiten verwiesen auf einen IE-spezifische „onfocusout“ Ereignis, aber ich konnte nicht ein kohärentes Arbeitsbeispiel für das finden, was ich brauche.

Was ist Stack-Überlauf sagt über die beste Art und Weise IE Browser-Fenster zu erhalten zu schließen, wenn sie den Fokus verlieren?

Ich bin mit Dojo so, wenn es in dieser Bibliothek einige Abkürzung ist, würden Informationen zu begrüßen. Ansonsten Standard IE Anrufe wird die beste Antwort sein.

War es hilfreich?

Lösung

dachte ich, die Alternative in IE aus.

Dieses:

        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");
        };

sollte wie folgt geschrieben werden in IE arbeiten:

        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");
            }
        };

Die Gründe?

  • Im IE-Fenster Objekte nicht reagieren Ereignisse zu verwischen. Deshalb müssen wir das proprietäre onfocusout Ereignis verwenden.
  • Im IE onfocusout wird von den meisten HTML-Elemente gesendet, also müssen wir eine gewisse Logik hinzufügen, um zu bestimmen, welche onfocusout das eine durch das Fenster den Fokus verliert verursacht wird. In onfocusout ist das Attribut active des Dokuments immer unterschiedlich von dem vorherigen Wert - außer , wenn das Fenster selbst den Fokus verliert. Dies ist das Stichwort, das Fenster zu schließen.
  • In IE, Dokumente in einem neuen Fenster eine onfocusout senden, wenn das Fenster zum ersten Mal erstellt wird. Deshalb müssen wir nur die onfocusout Handler hinzufügen, nachdem es in den Mittelpunkt gerückt wurde.
  • Im IE window.open scheint nicht zuverlässig ein Fenster-Handle zurück, wenn neue Fenster erstellt werden. Deshalb müssen wir das Fenster mit Namen, um nachzuschlagen, um es zu schließen.

Andere Tipps

Versuchen:

document.onfocusout = window.close();

Sie könnten versuchen, dies als Teil eines IE-spezifischen Codeblock:

w.onblur = function() { w.close();};
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top