Chrome扩展程序和加载外部Google API未捕获的ReferenceError

时间:2010-10-16 14:55:03

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

目前我正在创建Chrome扩展程序。为此,我需要使用Google的Calendar Data API。这是我的manifest.json文件:

{
"name": "Test",
"version": "1.0",
"background_page": "background.html",
"content_scripts": [
    {
    "matches": ["<all_urls>"],
    "js": ["jquery.js", "content_script.js"]
    }
],
"permissions": [
    "tabs", "http://*/*"
]

}

我尝试将以下内容添加到清单文件的js部分,但在加载扩展时会引发错误。

http://www.google.com/jsapi?key=keyhere

我也尝试过添加

document.write('<script type="text/javascript" src="http://www.google.com/jsapi?key=keyhere"></script>');

到我的background.html文件。但是,每当我打电话

google.load("gdata", "1");

我收到一条错误消息,指出未捕获的ReferenceError:谷歌未定义。为什么我的扩展程序在加载其他api时没有加载这个API?

3 个答案:

答案 0 :(得分:1)

您不能将外部脚本包含在content_scripts

如果您想使用<script>注入document.write标记,则需要在结束标记中屏蔽斜杠:

document.write('...<\/script>');

您可以像往常一样将外部API添加到后台页面中:

<script type="text/javascript" src="http://www.google.com/jsapi?key=keyhere"></script>

如果您需要在内容脚本中使用此api,那么您可以向后台页面发送请求,并要求它在那里执行与API相关的操作,然后将结果发送回您的内容脚本。

答案 1 :(得分:0)

感谢您的链接,它帮助了很多。但是,现在我遇到了另一个有趣的问题。

    for (var i = rangeArray.length - 1; i >= 0; i--) {
    var myLink = document.createElement('a'); 
    myLink.setAttribute('onclick','helloThere();'); 
    myLink.innerText ="GO";
    rangeArray[i].insertNode(myLink);
}

现在我收到错误,“helloThere is not defined”,即使我将该函数放在当前函数上方大约十行,并且在同一文件中有上述循环。为什么会发生这种情况?如果我这样做:

    for (var i = rangeArray.length - 1; i >= 0; i--) {
    var myLink = document.createElement('a'); 
    myLink.setAttribute('onclick','chrome.extension.sendRequest({greeting: "hello"}, function(response) { });'); 
    myLink.innerText ="GO";
    rangeArray[i].insertNode(myLink);
}

我得到Uncaught TypeError:无法调用未定义的方法'sendRequest'

答案 2 :(得分:0)

这是因为您的代码中存在一些语法错误。我有同样的问题。我在火狐中打开了我的background.html页面并启用了火焰插件。 Fire-bug控制台应该是我的错误,我修复了它现在正在运行。