我正在使用oAuth 1.0来访问第三方数据。
为此我采取了以下步骤: -
用户点击“与第三方同步”按钮。 (用户必须单击,因为这通常不会调用弹出窗口阻止程序。)
当用户点击此按钮后,执行以下代码:
$('#sync_with_thirdparty').click(function(){
var child = window.open('/oauth');
$(child).unload(function() {
if (this.location != "about:blank") {
alert("Child window closed");
}
});
});
现在,在新窗口中,PHP从第三方获取身份验证URL,然后将用户重定向到相同的URL。一旦用户重定向到第三方代码,就会说“子窗口已关闭”。
然后用户自己登录第三方网站(如有必要)并可以访问我们的应用程序。只要他点击允许按钮,第三方就会将用户重定向到我们网站的新页面。在这个页面上,我调用的是window.close()方法,它完全正常。
但是在子窗口中的window.close()上,父窗口无法知道孩子已关闭。
我如何解决这个问题?
注意:此第3个不喜欢Iframe并刷新自己在顶部窗口中打开。我对第三方的内容没有任何控制权。我们的网页采用HTML5格式。
答案 0 :(得分:1)
子窗口可以通过window.opener()
function与父窗口进行通信。您可以执行以下操作:
子窗口
window.opener.messageFromChildWindow('closed');
父窗口
function messageFromChildWindow(msg) {
if(msg === 'closed') {
alert('child window closed');
}
}
答案 1 :(得分:0)
您无法访问子窗口的内容或事件活动,因为Javascript中存在权限问题。
好吧,如果事情在同一个域上,你应该尝试在窗口中同时执行document.domain
相同的操作。
像:
var hdomain="yourdomain.com";
if (document.domain != hdomain){
if ((document.domain.indexOf(hdomain)) != -1){
document.domain = hdomain
}
}
将它放在父母和孩子的页面中。
祝你好运。