0

我在弹出窗口中打开了用于 Gmail 的 oauth2,newWindow = window.open(...)然后当用户完成填写并点击“允许”时,它会重定向到我的服务器,在那里检索和存储令牌。最后,服务器返回“错误”或“成功”,因此弹出窗口中只会包含它。现在在 Angular 方面,我正在运行它。

checkConnect = setInterval(function() {
    try{
      if(newWindow.document.body.innerText === 'Success') {
        console.log('Success');
        newWindow.close();
        window.clearInterval(checkConnect);
      }else if(newWindow.document.body.innerText === 'Error') {
        console.log('We had an error!');
        newWindow.close();
        window.clearInterval(checkConnect);
      }else if(newWindow.closed) {
        console.log('WINDOW WAS closed');
        window.clearInterval(checkConnect);
      }
    }catch(e) {
      //console.log(e);
    }
}, 100);

这有时有效,有时会失败。我还将此代码用于其他 Oauth 提供程序,例如 Dropbox。有时它可以工作,有时它不能。知道为什么吗?

4

1 回答 1

0

好吧,我无法通过使用弹出窗口来弄清楚。但是,我可以通过在同一页面中打开 oauth 页面并随后重定向回我希望用户访问的页面来解决这个问题。

此外,谷歌提供的库可以在弹出窗口中为您打开并处理关闭。

于 2016-03-19T17:13:39.600 回答