我在http://developer.chrome.com阅读了有关背景页面和内容脚本的内容 而且我对它们感到困惑,我无法理解何时使用Background js以及何时是内容脚本。例如:
清单
{
"name": "Hello World",
"version": "2.0",
"manifest_version": 2,
"background":
{
"scripts": ["background.js"]
},
"content_scripts":
[
{
"matches": ["http://*/*", "https://*/*"],
"js": ["js/myScript.js"]
}
],
"permissions": ["tabs", "http://*/*"],
"browser_action":
{
"default_icon": "icon.png"
}
}
如果我将background.js作为:
// Called when the user clicks on the browser action.
chrome.browserAction.onClicked.addListener(function(tab) {
alert("test");
});
效果很好。但是在myScript.js中使用相同的内容。这不行。
所以,我不知道哪个脚本位于后台,位于content_scripts中,请指导我。
谢谢
答案 0 :(得分:19)
实际上,Content scripts是在网页上下文中运行的JavaScript文件。通过使用标准文档对象模型(DOM),他们可以阅读浏览器访问的网页的详细信息,或对其进行更改。
扩展的常见需求是使用单个长时间运行的脚本来管理某个任务或状态。 Background pages救援。后台页面是一个在扩展过程中运行的HTML页面。它存在于您的扩展的生命周期中,并且一次只有一个实例处于活动状态。
答案 1 :(得分:3)
我知道这个问题已经很久了,但是我最近开始涉足Chrome扩展程序开发,并遇到了与您一样的确切问题。因此,我希望我的回答能为这种困惑提供一些启发。
您已指定myScript.js
作为内容脚本。将代码放入内容脚本后,代码无法正常工作的原因是,它需要侦听浏览器按钮的click事件。但是,内容脚本仅具有有限的访问Chrome api的权限,大部分是chrome.runtime
事件。它无法检测到chrome.browserAction.onClick
事件。
另一方面,后台脚本可以访问所有Chrome API。
何时使用后台脚本而不是内容脚本取决于您的扩展目标。您是否只想更改网页的显示方式?然后,您只需要内容脚本,而无需后台脚本。例如,如果要扩展任何网页上的暗模式,可以不使用后台脚本。
如果您要保存用户首选项以获取扩展程序将自动切换暗模式的站点列表,该怎么办?然后添加一个后台脚本,该脚本:-将其首选项存储到Chrome存储。
那不是最好的例子,但是我的意思是,当您需要处理常用功能并保持用户体验时,需要使用后台脚本。