背景与内容脚本

Dar*_*ght 18 javascript google-chrome

我在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"
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我有background.js作为:

// Called when the user clicks on the browser action.
chrome.browserAction.onClicked.addListener(function(tab) {
  alert("test");
});
Run Code Online (Sandbox Code Playgroud)

它运作良好.但是在myScript.js中使用相同的内容.这不行.

所以,我不知道哪个脚本位于后台,位于content_scripts中,请指导我.

谢谢

The*_*pha 24

实际上,内容脚本是在网页上下文中运行的JavaScript文件.通过使用标准文档对象模型(DOM),他们可以阅读浏览器访问的网页的详细信息,或对其进行更改.

扩展的常见需求是使用单个长时间运行的脚本来管理某个任务或状态.背景页面的背景rescue.The页面是,在推广过程中运行的HTML页面.它存在于扩展的生命周期中,并且一次只有一个实例处于活动状态.

  • @DarkLight,是的,您可以使用内容脚本,请参阅 [这个答案](http://stackoverflow.com/questions/6499471/trigger-chrome-browseraction-onclicked-with-a-function) 和 [还有这个](http: //stackoverflow.com/questions/10041595/chrome-extensions-how-can-i-perform-an-action-when-chrome-browseraction-oncli)和[这个](http://developer.chrome.com/扩展/浏览器操作.html)。 (3认同)

byt*_*gle 11

我知道这个问题是很久以前的问题了,但我最近进入了 Chrome 扩展程序开发,并且遇到了和你一样的问题。所以我希望我的回答能对这种困惑有所了解。

您已指定myScript.js为内容脚本。将您的代码放入内容脚本时不起作用的原因是它需要侦听浏览器按钮单击事件。但是,内容脚本只能有限地访问 Chrome api,主要是chrome.runtime事件。它无法检测chrome.browserAction.onClick事件。

另一方面,后台脚本可以访问全套 Chrome api。

何时使用后台脚本而不是内容脚本取决于您的扩展目标。您想简单地更改网页的呈现方式吗?那么你只需要内容脚本,而不是后台脚本。例如,如果你想在任何网页上做一个扩展来切换暗模式,你可以不用后台脚本。

如果您想保存您的扩展程序将自动切换暗模式的站点列表的用户首选项怎么办?然后添加一个后台脚本: - 将他们的首选项存储到 Chrome 存储中。

  • 检测用户何时登陆列表中的站点
  • 向内容脚本发送消息以指示其切换暗模式。

这不是最好的例子,但我的观点是,当您需要处理常见功能并保持用户体验时,需要后台脚本。