当打开的弹出窗口的位置发生变化时收到通知
我在我的网站上实施了外部OAuth身份验证。 按钮点击我打开弹出与我们的Facebook的授权页面。 现在我需要知道何时完成认证以读取OAuth令牌并关闭弹出窗口。当打开的弹出窗口的位置发生变化时收到通知
click: function() {
var popup = window.open(url, title, '<options>');
popup.onload = function() {
//1. if url contains token - finish OAuth authentication
//2. close popup
//but 'onload' doesn't work for external domains
}
return false;
},
当我尝试使用轮询技术,我hetting以下安全错误访问:
Uncaught SecurityError: Blocked a frame with origin " https://some_app_host_not_the_same_as_following.com " from accessing a frame with origin " https://some_auth_host_which_works_with_facebook.com ". Protocols, domains, and ports must match.
我怎样才能做到这一点?
如果您可以控制弹出窗口的内容,请处理窗口的卸载事件,并通过opener属性通知原始窗口,首先检查开启程序是否已关闭。请注意,这不会在Opera中始终有效。
window.onunload = function() {
var win = window.opener;
if (win.closed) {
win.someFunctionToCallWhenPopUpCloses();
}
};
因为每当用户在弹出的页面导航离开,而不只是在关闭窗口,你应该检查弹出已someFunctionToCallWhenPopUpCloses实际关闭卸载事件将触发:
var popUp = window.open("popup.html", "thePopUp", "");
function someFunctionToCallWhenPopUpCloses() {
window.setTimeout(function() {
if (popUp.closed) {
alert("Pop-up definitely closed");
}
}, 1);
}
如果您不能控制弹出窗口的内容,或者您的某个目标浏览器不支持卸载事件,那么您可以简化为主窗口中的某种轮询解决方案。调整适合的时间间隔。
var win = window.open("popup.html", "thePopUp", "");
var pollTimer = window.setInterval(function() {
if (win.closed !== false) { // !== is required for compatibility with Opera
window.clearInterval(pollTimer);
someFunctionToCallWhenPopUpCloses();
}
}, 200);
的[是否有可能打开一个弹出用JavaScript,然后当用户关闭它检测?]
我已经实现了轮询解决方案,不幸的是无法读取打开的弹出窗口的位置属性。访问被拒绝错误:/ – 2014-12-06 03:23:15
可能重复(http://stackoverflow.com/questions/3291712/is-it-possible-to- open-a-popup-javascript-and-then-detect-when-the-user-clo) – rfornal 2014-12-06 02:33:44