我使用以下代码访问google chrome中的背景页面功能
popup.html
function sendRequest(ea,eb)
{
console.log("Inside");
chrome.extension.sendRequest({ea:ea,eb:eb},
function(response)
{
alert(response.farewell);
});
}
background.html
<html>
<body>
<script>
chrome.extension.onRequest.addListener(
function(request, sender, sendResponse) {
sendResponse({farewell: "goodbye"});
})
</html>
</body>
</script>
的manifest.json
{
"name": "My First Extension",
"version": "1.0",
"manifest_version": 2,
"background": {
"page": "background.html"
},
"content_scripts": [
{
"matches": ["http://*/"],
"js": ["popup.js"]
}
],
"description": "The first extension that I made.",
"browser_action": {
"default_icon": "icon.png",
"default_popup": "mine.html"
},
"permissions": [
"tabs","http://*/","background"
],
"web_accessible_resources": ["loading.html","bu.png"]
}
但是它不会打印警报。谁能告诉我我在这里做错了什么?
答案 0 :(得分:3)
您的HTML for background.html格式错误,应该修复;
<html>
<body>
<script>
chrome.extension.onRequest.addListener(
function(request, sender, sendResponse) {
sendResponse({farewell: "goodbye"});
})
</script>
</body>
</html>
标签应按照打开的相反顺序关闭,以保持正确的层次结构。由于您尚未执行此操作,因此<script>
元素格式错误且包含无效语法</html></body>
,因此无法正确执行。
由于您正在使用清单的version 2,因此您可能需要考虑将此脚本元素的内容(忽略所有HTML)抽象为其自己的文件(例如background.js)并将清单更改为以下内容;
{
"name": "My First Extension",
"version": "1.0",
"manifest_version": 2,
"minimum_chrome_version": "18",
"background": {
"scripts": ["background.js"]
},
"content_scripts": [
{
"matches": ["http://*/"],
"js": ["popup.js"]
}
],
"description": "The first extension that I made.",
"browser_action": {
"default_icon": "icon.png",
"default_popup": "mine.html"
},
"permissions": [
"tabs","http://*/","background"
],
"web_accessible_resources": ["loading.html","bu.png"]
}
请注意,background property现在包含一个字符串数组,表示要在动态生成的背景页面中加载(按指定顺序)的JavaScript文件。
我还将minimum_chrome_version
属性设置为18,因为只有在定位此版本的Chrome及更高版本时才能使用清单版本2.
开发人员现在应该只需要支持旧版本的Chrome时才需要使用后台页面而不是脚本。
它只是点击了您尝试在后台页面中执行嵌入式JavaScript。清单版本2引入了Content Security Policies,禁止执行内联(例如onclick="showDialog();"
和href="javascript:void(0);"
)和嵌入式JavaScript。这就是为什么你的background.html不能工作以及为什么background.js会工作的原因。您还需要确保popup.html不包含任何嵌入式JavaScript。最好的解决方法(通常是最佳实践)是将所有JavaScript抽象为HTML文件引用的自己的文件(例如popup.js)。例如;
<script src="/popup.js"></script>