IE 中的自动关闭弹出窗口 - 如何获得正确的 onBlur 行为?
-
09-09-2019 - |
题
我希望当用户单击远离它时,瞬态窗口会自行关闭。这适用于 Firefox:
var w = window.open(...);
dojo.connect(w, "onblur", w, "close");
但它似乎在 Internet Explorer 中不起作用。其他一些网站引用了 IE 特定的“onfocusout”事件,但我找不到我需要的连贯的工作示例。
Stack Overflow 对于 IE 浏览器窗口失去焦点时关闭的最佳方法有何说法?
我正在使用 Dojo,因此如果该库中有一些快捷方式,欢迎提供信息。否则标准 IE 调用将是最好的答案。
解决方案
我在 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");
};
应该这样写才能在 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");
}
};
原因?
- 在 IE 中,窗口对象不响应模糊事件。因此我们必须使用专有的 onfocusout 事件。
- 在IE中,大多数HTML元素都会发送onfocusout,因此我们必须添加一些逻辑来确定哪个onfocusout是由窗口失去焦点引起的。在onfocusout中,文档的activeElement属性总是与之前的值不同—— 除了 当窗口本身失去焦点时。这是关闭窗口的提示。
- 在 IE 中,新窗口中的文档在首次创建窗口时会发送 onfocusout。因此,我们只能在 onfocusout 处理程序获得焦点后添加它。
- 在 IE 中,当创建新窗口时,window.open 似乎无法可靠地返回窗口句柄。因此,我们必须通过名称查找窗口才能关闭它。
其他提示
尝试:
document.onfocusout = window.close();
您可能试图以此为特定IE-代码块的一部分:
w.onblur = function() { w.close();};
不隶属于 StackOverflow