所以,问题是弹出窗口阻止窗口打开,即使它是由用户操作完成的,单击例如..
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阻止。 我希望现在有人能解决它:),谢谢
答案 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();
});