【问题标题】:Popup blocking the gdrive authorization in chrome在 chrome 中阻止 gdrive 授权的弹出窗口
【发布时间】:2013-03-17 11:35:21
【问题描述】:

所以,问题是弹出窗口阻止窗口打开,即使它是由用户操作完成的,例如单击..

gapi.auth.authorize({
   client_id: this.client_id,
   scope: this.scopes,
   access_type: 'online',
   immediate: immediate
}, function(authResult) {
   console.log(authResult)
});

如果我只是在用户点击此处打开窗口:

$('.some').click(funciton(){
    window.open(someurl)
})

它工作正常,但如果我这样做了,它会抛出 gdrive api(gapi.auth.authorize),无论如何都会阻塞。

必须,我不能强迫用户关闭弹出窗口阻止。 我希望任何人现在如何解决它:),谢谢

【问题讨论】:

    标签: javascript authentication google-drive-api


    【解决方案1】:

    您只需要gapi.auth2.getAuthInstance().isSignedIn.get(); 没有按钮授权权限。这会禁用弹出窗口。

    gapi.client.init({
         discoveryDocs: DISCOVERY_DOCS,
         clientId: CLIENT_ID,
         scope: SCOPES
    }).then(function () {    
         // Handle the initial sign-in state.
         gapi.auth2.getAuthInstance().isSignedIn.get();
    });
    

    【讨论】:

      【解决方案2】:

      第一次调用 gapi.auth.authorize 可以触发弹出窗口阻止程序。这 防止这种情况的最佳方法是设置用户触发的操作 使用 immediate: false 参数调用 gapi.auth.authorize。

      引用自 api 文档:https://developers.google.com/api-client-library/javascript/features/authentication#popup

      【讨论】:

        【解决方案3】:

        只需添加参考 https://developers.google.com/api-client-library/javascript/reference/referencedocs

        gapi.auth.init(回调) 初始化授权功能。在客户端加载时调用它,以防止弹出窗口阻止程序在 gapi.auth.authorize 调用上阻止身份验证窗口。

        ps:投票需要 15 声望 .. 所以无法投票赞成 Ben 的回答 :)

        【讨论】:

        • 非常感谢!
        【解决方案4】:

        试试这个:

        在对 client.js 的调用中包含一个 onload 事件

        <script type="text/javascript" src="https://apis.google.com/js/client.js?onload=handleClientLoad"></script>

        从 onload 函数调用 gapi.auth.init:

        function handleClientLoad() { window.setTimeout(gapi.auth.init,1); }

        在您的授权配置中设置立即:false。

        检查页面流中 1. 是否低于 2.。

        【讨论】:

          【解决方案5】:

          不是来自用户事件的弹出窗口将根据您的浏览器设置被阻止。您可以尝试将 immediate 设置为 false:

          gapi.auth.authorize({
             client_id: this.client_id,
             scope: this.scopes,
             immediate: false
          }, function(authResult) {
             console.log(authResult)
          });
          

          您可以在授权应用后使用此代码刷新访问令牌。

          【讨论】:

          • 在我的示例中,变量“immediate”已经包含 false,popap 已经弹出但阻塞。 gapi.auth.authorize 调用点击事件,但无论如何阻止,这是一个问题。
          猜你喜欢
          • 2013-02-22
          • 2010-10-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-05-04
          • 1970-01-01
          • 1970-01-01
          • 2013-05-08
          相关资源
          最近更新 更多