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