Domanda

Voglio una finestra transitoria per chiudere se stesso quando l'utente fa clic lontano da esso. Questo funziona per Firefox:

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

, ma non sembra funzionare in Internet Explorer. Alcuni altri siti hanno fatto riferimento a un IE-specifici "onfocusout" evento, ma non riuscivo a trovare un esempio di lavoro coerente di cosa ho bisogno.

Che cosa Stack Overflow dire circa il modo migliore per ottenere le finestre del browser IE per chiudere quando perdono concentrarsi?

sto usando Dojo quindi se c'è qualche collegamento in quella biblioteca, le informazioni sarebbe il benvenuto. In caso contrario, chiamate standard di IE sarà la migliore risposta.

È stato utile?

Soluzione

ho capito l'alternativa in IE.

Questa:

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

dovrebbe essere scritto come questo per lavorare in 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");
            }
        };

Le ragioni?

  • In IE, oggetti finestra non rispondono a confondersi eventi. Quindi dobbiamo utilizzare l'evento onfocusout proprietaria.
  • In IE, onfocusout viene inviato dalla maggior parte degli elementi HTML, quindi dobbiamo aggiungere un po 'di logica per determinare quale onfocusout è quella causata dalla finestra di perdere la concentrazione. Nel onfocusout, l'attributo activeElement del documento è sempre diverso dal valore precedente - tranne quando la finestra stessa perde il focus. Questo è lo spunto per chiudere la finestra.
  • In IE, i documenti in una nuova finestra invia onfocusout quando viene creata la finestra. Quindi, dobbiamo solo aggiungere il gestore onfocusout dopo che è stato messo a fuoco.
  • In IE, window.open non sembra di tornare in modo affidabile un handle di finestra quando si creano nuove finestre. Quindi dobbiamo guardare la finestra per nome in ordine per chiuderla.

Altri suggerimenti

Prova:

document.onfocusout = window.close();

Si potrebbe provare questo come parte di un blocco di codice IE-specifici:

w.onblur = function() { w.close();};
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top