【问题标题】:Listen to Child window close event in Oauth Like Situation [ jQuery| Javascript ]在 Oauth Like Situation [jQuery| 中收听子窗口关闭事件Javascript ]
【发布时间】:2013-02-03 21:19:36
【问题描述】:

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

为此,我正在采取以下步骤:-

  1. 用户单击“与第 3 方同步”按钮。 (用户必须点击,因为这通常不会调用弹出窗口拦截器。)

  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 在新窗口中从第 3 方获取身份验证 URL,然后将用户重定向到相同的 URL。一旦用户重定向到第 3 方,上面的代码就会显示“子窗口已关闭。”。

  4. 然后用户让自己登录第三方网站(如有必要)并允许访问我们的应用程序。只要他点击允许按钮,第三方就会将用户重定向到我们网站的新页面。在此页面上,我正在调用 window.close() 方法,该方法运行良好。

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

我该如何解决这个问题?

注意:这 3rd 不喜欢 Iframe 并刷新自身以在顶部窗口中打开。我无法控制第 3 方的内容。我们的网页是 HTML5 格式的。

【问题讨论】:

    标签: javascript jquery html oauth


    【解决方案1】:

    子窗口可以通过window.opener()function与父窗口通信。你可以这样做:

    子窗口

    window.opener.messageFromChildWindow('closed');
    

    父窗口

    function messageFromChildWindow(msg) {
        if(msg === 'closed') {
            alert('child window closed');
        }
    }
    

    【讨论】:

      【解决方案2】:

      您无法访问子窗口的内容或事件活动,因为它在 Javascript 中存在权限问题。

      好吧,如果事情在同一个域上,你应该尝试一次在两个窗口中强制执行document.domain

      喜欢:

      var hdomain="yourdomain.com";
      if (document.domain != hdomain){
         if ((document.domain.indexOf(hdomain)) != -1){
             document.domain = hdomain
         }
      }
      

      把它放在父页面和子页面中。

      祝你好运。

      【讨论】:

        猜你喜欢
        • 2011-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-08
        • 1970-01-01
        • 1970-01-01
        • 2013-05-18
        • 2012-03-12
        相关资源
        最近更新 更多