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

时间:2009-04-09 21:30:44

标签: javascript internet-explorer dojo popup onblur

当用户点击它时,我想要一个瞬态窗口关闭它。这适用于Firefox:

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

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

Stack Overflow如何说明在失去焦点时让IE浏览器窗口关闭的最佳方式?

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

3 个答案:

答案 0 :(得分: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似乎不能可靠地返回窗口句柄。因此,我们必须按名称查看窗口才能关闭它。

答案 1 :(得分:1)

尝试:

document.onfocusout = window.close();

答案 2 :(得分:0)

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

w.onblur = function() { w.close();};