在Chrome中阻止弹出窗口会影响GDrive授权。

4
所以,问题在于当用户进行点击等操作时弹出窗口被阻止打开。
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)执行它,那么无论如何都会被阻止。

这是必须的,我不能强迫用户关闭弹出窗口阻止功能。 我希望有人现在可以解决它:),谢谢。

5个回答

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); }

在您的授权配置中将immediate设为false。

请检查1.是否在页面流程中位于2.之下。


4

非常感谢您! - Libin

3

如果弹出窗口不是由用户事件触发的,将根据您的浏览器设置而被阻止。您可以尝试将 immediate 设置为false:

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

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

1
在我的例子中,变量“immediate”已经包含了false,popap已经弹出但是阻塞。gapi.auth.authorize调用点击事件,但无论如何都会阻塞,这是一个问题。 - nikitka

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();
});

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接