当它失去焦点时关闭弹出窗口

时间:2011-10-26 23:22:58

标签: javascript

我想知道是否可以使用javascript创建弹出窗口,然后在失去焦点时关闭该窗口。

这是我的代码:

    var theWindow;


function launchWindow() {
            theWindow=window.open('www.domain.com');

          theWindow.onblur = function() {
                this.close();
        };
}

但这根本不起作用。有什么建议吗?

编辑:我发现了一个适合我的解决方案,希望它能为其他人工作:

var theWindow;
var windows = [];


function launchWindow() {
            theWindow=window.open('www.domain.com');

            windows.push(theWindow);

            window.onfocus = function() {
                for (x in windows) {
                    windows[x].close();
                }
            };
}

这不是我原始问题的精确解决方案(当它失去焦点时它没有关闭窗口,而是在主窗口重新获得焦点时关闭它)但它对我有效。

3 个答案:

答案 0 :(得分:2)

弹出窗口的URL是否来自与父级相同的域?如果没有,您可能无法将事件附加到新窗口的onblur事件。

在查看StackOverflow时从浏览器控制台运行此操作,以确保当弹出窗口与原始窗口位于同一域时,它确实有效:

var theWindow = window.open ("http://www.stackoverflow.com","theWindow");
theWindow.onblur = function() { this.close(); };

答案 1 :(得分:0)

window没有onblur事件

尝试通过关注主窗口的<body>

来调用它

答案 2 :(得分:0)

您可能遇到的问题是在窗口开始加载页面之前绑定onblur处理程序。加载页面后,您的onblur处理程序就消失了。您需要将绑定推迟足够长的时间,以便在绑定事件处理程序之前为页面提供开始加载的机会:

function launchWindow() { 
    var theWindow = window.open('www.domain.com'); 
    setTimeout(function() {
        theWindow.onblur = function() { 
            this.close();
        };
    }, 2000); 
} 

如果要在其他域中加载页面,则根本无法绑定onblur处理程序。您需要使用onfocus坚持您的解决方案。