如何动态加载google client.js

时间:2013-02-25 09:16:40

标签: javascript jquery api dynamic

这是我第一次在stackoverflow上发帖。

我的问题很简单(我认为)。我的任务是允许用户使用Facebook,Google Plus,LinkedIn和Twitter注册。现在,我想要做的是当用户点击社交网络按钮时,它会将它们重定向到注册页面,并带有一个标志,用于确定他们想要使用哪个社交网络。这里没问题。

我想根据他们选择的社交网络动态加载每个API。

我在动态加载Google JS API时遇到问题。在here中找到的样本以直接的方式加载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文件的正确方法是什么?任何帮助,将不胜感激。谢谢。

1 个答案:

答案 0 :(得分: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 }