弹出窗口阻止chrome中的gdrive授权

时间:2013-03-27 11:42:46

标签: javascript authentication google-drive-api

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

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),无论如何都会阻塞。

必须,我不能强迫用户关闭popap阻止。 我希望现在有人能解决它:),谢谢

5 个答案:

答案 0 :(得分:5)

试试这个:

在对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.

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:2)

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

  

gapi.auth.init(回调)   初始化授权功能。在客户端加载时调用此方法以防止弹出窗口阻止程序阻塞gapi.auth.authorize调用上的auth窗口。

ps:投票需要15点声望..因此无法对Ben的回答进行投票:)

答案 3 :(得分:0)

  

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

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

答案 4 :(得分:0)

您只需要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();
});