GAPI未定义

时间:2015-04-03 14:07:12

标签: javascript google-chrome-extension google-api

我在使用我的Chrome扩展程序加载Google javascript api时遇到了很多麻烦。请注意我是javascript的新手,甚至更新的chrome扩展。

我有一个执行脚本的background.js文件

chrome.tabs.executeScript(null, { file: "ChromeExtension.js" });

此ChromeExtension.js文件如下所示

//Call Initialize Method
init();

//Function To Initial Chrome Extension
function init(){
    var clientID = 'Client ID';
    var apiKey = 'API Key';
    var scopes = 'https://www.googleapis.com/auth/plus.me';

    loadGAPIClient();

    gapi.client.setApiKey(apiKey);


}

我的问题是在

gapi.client.setApiKey(apiKey);

我得到 gapi未定义事情是,一旦我的ChromeExtension.js完成执行,gapi已完全定义并可用。

我在一些堆栈溢出问题中尝试了其他建议,但无济于事。我相信这是由于缺乏Javascript知识,但如果有人能够提供一些帮助,我将不胜感激。

感谢您的时间。

编辑 - 当前GAPI加载

function () loadGAPIClient(){
    var s = document.createElement("script");
        s.type = "text/javascript";
        s.src = "https://apis.google.com/js/client.js";
        $("head").append(s);
}

这个函数在我的init()中调用,我也更新了它以反映这一点。

我还尝试过使用jQuery.getScript等方法。

请理解这是我的问题,我找不到正确加载GAPI客户端的方法

2 个答案:

答案 0 :(得分:3)

Isolated world问题。

具体来说,您的loadGAPIClient会添加<script>标记,然后在页面的上下文中执行该脚本,这与内容脚本上下文不同。

最终结果是gapi在页面代码中定义(如果页面加载了自己的副本,可能会产生冲突),但在您的代码中仍未定义。

我没有看到一个简单的出路。您只能通过调用executeScript或在清单中声明它们来加载内容脚本上下文中的内容;如果我没记错的话,GAPI将尝试使用<script>注入方法加载更多库。

所以我猜你最好的选择是在后台页面中加载库并从那里开始使用它,因为只要你modify the CSP加载外部JS就可以了。

或者,您可以尝试this library,它可以解决您使用默认CSP时遇到的问题并使用chrome.identity API。它可能符合您的需求,但它再次无法在内容脚本中工作。

答案 1 :(得分:2)

不会威胁我的回答是冒犯性的,在您的代码段中没有证据表明,您已加载了{API {3}}上显示的Google API JavaScript库?

<script src="https://apis.google.com/js/plus.js?onload=init"></script>

你需要使用这个方法,不要手工调用init:让我们为你调用gapi:)