1

当用户点击离开它时,我希望一个瞬态窗口自行关闭。这适用于火狐:

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

但它似乎不适用于 Internet Explorer。其他一些网站提到了一个特定于 IE 的“onfocusout”事件,但我找不到我需要的一个连贯的工作示例。

Stack Overflow 对让 IE 浏览器窗口在失去焦点时关闭的最佳方法有什么看法?

我正在使用 Dojo,所以如果该库中有一些快捷方式,欢迎提供信息。否则标准 IE 调用将是最好的答案。

4

3 回答 3

2

我在 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 属性始终与之前的值不同——除非窗口本身失去焦点。这是关闭窗口的提示。
  • 在 IE 中,新窗口中的文档在首次创建窗口时会发送 onfocusout。因此,我们必须只在它获得焦点后添加 onfocusout 处理程序。
  • 在 IE 中,window.open 在创建新窗口时似乎无法可靠地返回窗口句柄。因此,我们必须按名称查找窗口才能关闭它。
于 2009-04-10T15:03:09.040 回答
1

尝试:

document.onfocusout = window.close();
于 2009-04-09T22:55:27.370 回答
0

您可以尝试将此作为 IE 特定代码块的一部分:

w.onblur = function() { w.close();};
于 2009-04-09T22:02:35.203 回答