在Oauth Like Situation [jQuery |中听取Child窗口关闭事件Javascript]

时间:2013-02-19 08:52:16

标签: javascript jquery html5 oauth

我正在使用oAuth 1.0来访问第三方数据。

为此我采取了以下步骤: -

  1. 用户点击“与第三方同步”按钮。 (用户必须单击,因为这通常不会调用弹出窗口阻止程序。)

  2. 当用户点击此按钮后,执行以下代码:

        $('#sync_with_thirdparty').click(function(){
           var child = window.open('/oauth');
           $(child).unload(function() {
               if (this.location != "about:blank") {
                alert("Child window closed");
            }
          });
        });
    
  3. 现在,在新窗口中,PHP从第三方获取身份验证URL,然后将用户重定向到相同的URL。一旦用户重定向到第三方代码,就会说“子窗口已关闭”。

  4. 然后用户自己登录第三方网站(如有必要)并可以访问我们的应用程序。只要他点击允许按钮,第三方就会将用户重定向到我们网站的新页面。在这个页面上,我调用的是window.close()方法,它完全正常。

  5. 但是在子窗口中的window.close()上,父窗口无法知道孩子已关闭。

  6. 我如何解决这个问题?

    注意:此第3个不喜欢Iframe并刷新自己在顶部窗口中打开。我对第三方的内容没有任何控制权。我们的网页采用HTML5格式。

2 个答案:

答案 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
   }
}

将它放在父母和孩子的页面中。

祝你好运。