gpt4 book ai didi

javascript - IE 中的自关闭弹出窗口——如何获得正确的 onBlur 行为?

转载 作者:行者123 更新时间:2023-11-30 13:43:46 24 4
gpt4 key购买 nike

我想要一个 transient 窗口在用户点击离开时自行关闭。这适用于 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 中,onfocusout 是由大多数HTML 元素发送的,因此我们必须添加一些逻辑来确定哪个onfocusout 是由窗口失去焦点引起的。在 onfocusout 中,文档的 activeElement 属性总是不同于之前的值 -- except 当窗口本身失去焦点时。这是关闭窗口的提示。
  • 在 IE 中,新窗口中的文档会在首次创建窗口时发送一个 onfocusout。因此,我们必须仅在 onfocusout 处理程序进入焦点后才添加它。
  • 在 IE 中,window.open 在创建新窗口时似乎无法可靠地返回窗口句柄。因此,我们必须按名称查找窗 Eloquent 能关闭它。

关于javascript - IE 中的自关闭弹出窗口——如何获得正确的 onBlur 行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/735992/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com