Question

Je veux une fenêtre passagère à se fermer lorsque l'utilisateur clique loin de. Cela fonctionne pour Firefox:

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

mais il ne semble pas fonctionner dans Internet Explorer. Quelques autres sites ont fait référence à un événement spécifique à IE « onfocusout », mais je ne pouvais pas trouver un exemple de travail cohérent de ce que je dois.

Qu'est-ce que Stack Overflow dire au sujet de la meilleure façon d'obtenir les fenêtres du navigateur IE pour fermer quand ils perdent le focus?

J'utilise Dojo donc s'il y a un certain raccourci dans cette bibliothèque, l'information serait la bienvenue. Dans le cas contraire les appels standard IE sera la meilleure réponse.

Était-ce utile?

La solution

Je me suis dit à l'alternative dans 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");
        };

doit être écrit comme cela fonctionne dans 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");
            }
        };

Les raisons?

  • Dans IE, les objets de la fenêtre ne répondent pas à brouiller les événements. Par conséquent, nous devons utiliser l'événement onfocusout propriétaire.
  • Dans IE, onfocusout est envoyé par la plupart des éléments HTML, donc il faut ajouter une certaine logique pour déterminer qui est onfocusout celle causée par la fenêtre perdre de vue. Dans onfocusout, l'attribut activeElement du document est toujours différent de la valeur précédente - sauf lorsque la fenêtre se perd le focus. Ceci est la queue pour fermer la fenêtre.
  • Dans IE, les documents dans une nouvelle fenêtre envoyer un onfocusout lorsque la fenêtre est créée. Par conséquent, il faut ajouter le gestionnaire ne onfocusout après qu'il a été mis en évidence.
  • Dans IE, window.open ne semble pas revenir de manière fiable une poignée de fenêtre lorsque de nouvelles fenêtres sont créées. Par conséquent, nous devons regarder la fenêtre par nom afin de le fermer.

Autres conseils

Essayez:

document.onfocusout = window.close();

Vous pouvez essayer cela dans le cadre d'un bloc de code spécifique à IE:

w.onblur = function() { w.close();};
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top