我希望当用户单击远离它时,瞬态窗口会自行关闭。这适用于 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();};
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top