Javascript 失去焦点时关闭弹出窗口

Javascript 失去焦点时关闭弹出窗口,javascript,Javascript,我想知道是否有可能用javascript创建一个弹出窗口,然后在失去焦点时关闭该窗口 这是我的密码: var theWindow; function launchWindow() { theWindow=window.open('www.domain.com'); theWindow.onblur = function() { this.close(); }; } 但这根本不起作用。有什么

我想知道是否有可能用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();
                }
            };
}

这不是我最初问题的精确解决方案(它不会在窗口失去焦点时关闭窗口,而是在主窗口恢复焦点时关闭窗口),但它对我有效。

window
没有
onblur
事件


尝试通过关注主窗口的
来调用它的关闭弹出窗口的URL是否与父窗口来自同一域?否则,您可能无法将事件附加到新窗口的onblur事件

在查看StackOverflow时,从浏览器控制台运行此命令,以查看当弹出窗口与原始窗口位于同一域时,它是否确实起作用:

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

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

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

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

正确的解决方案。但并不是所有的浏览器都可以使用它。事实上,我刚才就尝试过了,但它对我不起作用。然而,我找到了一个很好的解决方案,并将其作为对原始问题的编辑发布。谢谢你的帮助。不,不是这样的!即使超时,它也不会在IE8中附加事件!同一领域。在IE9中,它的工作没有超时。