Javascript 当打开的弹出窗口的位置更改时收到通知

Javascript 当打开的弹出窗口的位置更改时收到通知,javascript,html,oauth,popup,window.location,Javascript,Html,Oauth,Popup,Window.location,我正在webiste上实现外部OAuth身份验证。 点击按钮,我打开了facebook认证页面的弹出窗口。 现在我需要知道身份验证何时完成,以读取OAuth令牌并关闭弹出窗口 click: function () { var popup = window.open(url, title, '<options>'); popup.onload = function () { //1. if url contains token - finish OAuth a

我正在webiste上实现外部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;
},
单击:函数(){
var popup=window.open(url,标题“”);
popup.onload=函数(){
//1.如果url包含令牌-完成OAuth身份验证
//2.关闭弹出窗口
//但是“onload”不适用于外部域
}
返回false;
},
当我尝试使用轮询技术访问时,我发现以下安全错误:

未捕获的安全性错误:阻止了具有原点的帧 “”访问具有原点的帧 "". 协议、域、, 端口必须匹配


如何实现这一点?

如果可以控制弹出窗口的内容,请在弹出窗口中处理窗口的卸载事件,并通过opener属性通知原始窗口,首先检查opener是否已关闭。请注意,这在Opera中并不总是有效

window.onunload = function() {
    var win = window.opener;
    if (win.closed) {
        win.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);

可能重复我已经实现的轮询解决方案,不幸的是无法读取打开的弹出窗口的location属性。拒绝访问错误:/