Je compris l'alternative dans IE.
Ce:
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 fenêtre ne répondent pas aux événements de flou. Par conséquent, nous devons utiliser l'événement onfocusout propriétaire.
- Dans IE, onfocusout est envoyé par la plupart des éléments HTML, nous devons donc ajouter une logique pour déterminer quel onfocusout est celui causé par le focus de la fenêtre perdre. Dans onfocusout, l'attribut activeElement du document est toujours différent de la valeur précédente - sauf lorsque la fenêtre elle-même perd le focus. C'est le signal pour fermer la fenêtre.
- Dans IE, les documents d'une nouvelle fenêtre envoient un onfocusout lors de la création de la fenêtre. Par conséquent, nous devons seulement ajouter le gestionnaire onfocusout après qu'il a été mis au point.
- Dans IE, window.open ne semble pas renvoyer de manière fiable un handle de fenêtre lors de la création de nouvelles fenêtres. Par conséquent, nous devons rechercher la fenêtre par son nom afin de la fermer.
pouvez-vous configurer l'événement sur la fenêtre contextuelle lorsque la fenêtre contextuelle obtient le focus initial? – scunliffe
J'ai essayé ça et je n'ai pas réussi à le faire fonctionner. Je peux essayer à nouveau, cependant. :) –
Le vrai problème est que l'événement ne fonctionne pas dans IE, cependant. –