Javascript 当打开的弹出窗口的位置更改时收到通知
我正在webiste上实现外部OAuth身份验证。 点击按钮,我打开了facebook认证页面的弹出窗口。 现在我需要知道身份验证何时完成,以读取OAuth令牌并关闭弹出窗口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
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属性。拒绝访问错误:/