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) をスローした場合、とにかくブロックします。

必須です。ユーザーに popap ブロックを強制的にオフにすることはできません。誰かがそれをどのように解決したかを願っています:)、ありがとう

4

5 に答える 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. の下にあることを確認します。

于 2013-05-07T08:52:48.053 に答える
4

参照を追加するだけ https://developers.google.com/api-client-library/javascript/reference/referencedocs

gapi.auth.init(callback) 認証機能を初期化します。クライアントが読み込まれるときにこれを呼び出して、ポップアップ ブロッカーが gapi.auth.authorize 呼び出しで認証ウィンドウをブロックしないようにします。

ps:投票するには15の評判が必要です..そのため、ベンの回答に投票できませんでした:)

于 2013-10-08T05:18:53.477 に答える
3

ユーザー イベントに起因しないポップアップは、ブラウザの設定によってはブロックされます。immediateを false に設定してみることができます:

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

アプリを既に承認した後、このコードを使用してアクセス トークンを更新できます。

于 2013-03-28T14:17:32.447 に答える
0

gapi.auth.authorize への最初の呼び出しで、ポップアップ ブロッカーがトリガーされる可能性があります。これを防ぐ最善の方法は、immediate: false パラメーターを指定して gapi.auth.authorize を呼び出すユーザー トリガー アクションを設定することです。

API ドキュメントから引用: https://developers.google.com/api-client-library/javascript/features/authentication#popup

于 2016-01-20T14:59:59.737 に答える
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();
});
于 2017-11-02T17:32:56.810 に答える