Selbstschließender Popups im IE - wie richtigen onBlur Verhalten zu bekommen?
-
09-09-2019 - |
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.
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();};