5

ここでスタックオーバーフローに投稿するのはこれが初めてです。

私の問題は単純です(と思います)。私は、ユーザーが Facebook、Google Plus、LinkedIn、Twitter のいずれかを使用してサインアップできるようにする任務を負っています。ここで、ユーザーが [ソーシャル ネットワーク] ボタンをクリックすると、使用するソーシャル ネットワークを決定するフラグが設定された登録ページにリダイレクトされます。ここでは問題ありません。

選択したソーシャル ネットワークに応じて、各 API を動的にロードしたいと考えています。

Google JS API を動的にロードするときに問題が発生します。ここにあるサンプルは、単純な方法で client.js をロードします。サンプルコードに従えば問題ありません。しかし、動的にロードしたい。

$.ajax、$.getScript を使用してみました。また、Google Analytics を非同期で呼び出すのと同じように、ページにスクリプトを追加してみました。上記のどれも機能しませんでした。私のコールバック関数は常に呼び出されるわけではありません。また、$.ajax と $.getScript のコールバック関数から setApiKey を呼び出すと、gapi.client が NULL になります。次に何をすべきかわかりません。

機能しなかったコード:

(function () {
var gpjs = document.createElement('script'); gpjs.type = 'text/javascript'; gpjs.async = false;
gpjs.src = 'https://apis.google.com/js/client.js?onload=onClientLoadHandler';
var sgp = document.getElementsByTagName('script')[0]; sgp.parentNode.insertBefore(gpjs, sgp);})();

$.getScript の使用

$.getScript("https://apis.google.com/js/client.js?onload=onClientLoadHandler", function () {
console.log("GP JS file loaded.");
SetKeyCheckAuthority();});

$.ajax の使用

$(document).ready(function () {
$.ajax({
    url: "https://apis.google.com/js/client.js?onload=onClientLoad",
    dataType: "script",
    success: function () {
        console.log("GP load successful");
        SetKeyCheckAuthority();
    },
    error: function () { console.log("GP load failed"); },
    complete: function () { console.log("GP load complete"); }
});});

この js ファイルを動的に呼び出す適切な方法を教えてください。どんな助けでも大歓迎です。ありがとうございました。

4

1 に答える 1

1

わかりました、解決策を考えましたが、それは悪いことだと思います。あなたがそれについてどう思うか教えてください。

$.getScript を使用して js ファイルをロードしました

$.getScript("https://apis.google.com/js/client.js?onload=onClientLoadHandler", function () {
console.log("GP JS file loaded.");
SetKeyCheckAuthority();});

そして、SetKeyCheckAuthority 関数で、gapi.client が null のときに 1 秒後に自分自身を呼び出す条件を設定しました。

function SetKeyCheckAuthority() {
if(null == gapi.client) {
    window.setTimeout(SetKeyCheckAuthority,1000);
    return;
}

//set API key and check for authorization here }
于 2013-02-26T03:08:04.593 に答える