目前我正在创建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?
答案 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控制台应该是我的错误,我修复了它现在正在运行。