我想知道是否可以使用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();
}
};
}
这不是我原始问题的精确解决方案(当它失去焦点时它没有关闭窗口,而是在主窗口重新获得焦点时关闭它)但它对我有效。
答案 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
坚持您的解决方案。