Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在类似Oauth的情况下侦听子窗口关闭事件[jQuery | Javascript]_Javascript_Jquery_Html_Oauth - Fatal编程技术网

在类似Oauth的情况下侦听子窗口关闭事件[jQuery | Javascript]

在类似Oauth的情况下侦听子窗口关闭事件[jQuery | Javascript],javascript,jquery,html,oauth,Javascript,Jquery,Html,Oauth,我正在使用oAuth 1.0访问第三方数据 为此,我正在采取以下步骤:- 用户单击“与第三方同步”按钮。(用户必须单击,因为这通常不会调用弹出窗口阻止程序。) 当用户单击此按钮时,将执行以下代码: $('#sync_with_thirdparty').click(function(){ var child = window.open('/oauth'); $(child).unload(function() { if (this.loca

我正在使用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()上,父窗口无法知道子窗口已关闭

  • 我怎样才能解决这个问题


    注意:第三个不喜欢Iframe,它会刷新自己以在顶部窗口中打开。我无法控制第三方的内容。我们的网页采用HTML5格式。

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

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

    比如:

    把这个放在父母和孩子的两个页面中


    祝你好运。

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

    子窗口

    window.opener.messageFromChildWindow('closed');
    
    父窗口

    函数消息fromchildwindow(msg){
    如果(消息=='已关闭'){
    警报(“子窗口关闭”);
    }
    }
    
    var hdomain="yourdomain.com";
    if (document.domain != hdomain){
       if ((document.domain.indexOf(hdomain)) != -1){
           document.domain = hdomain
       }
    }