Chrome扩展中的内容脚本和后台脚本到底是什么?

12
我正在开发一个Chrome扩展程序,用于自动填充演示数据。我已经创建了JavaScript文件xyz.js以自动填充数据。通过点击按钮执行脚本:chrome.tabs.executeScript(tabs[0].id, {file: "xyz.js"});,并且我已经得到了所需的输出结果。
我没有使用内容脚本或后台脚本。如果使用内容脚本或后台脚本,将会带来什么好处?

1
你使用 chrome.tabs.executeScript(tabs[0].id, {file: "xyz.js"}); 这意味着你正在使用一个内容脚本:xyz.js。 此外,这个调用 chrome.tabs.executeScript() 是在后台上下文中执行的,但很可能是从弹出窗口中执行的(猜测)。 - Makyen
1
我建议您阅读 Chrome扩展概述(也许还可以阅读概述链接的页面)。架构部分提供了整体架构信息,这应该有助于您理解事物通常是如何组织和完成的。您还可能需要阅读内容脚本消息传递 - Makyen
3个回答

14

首先,你确实使用了内容脚本。在这里,你只是通过事件控制内容脚本的执行。

背景脚本是在后台运行并监听触发器的东西,而用户与Chrome浏览器交互时会触发一些事件(例如在选项卡上监听点击事件)。

内容脚本则是实际上与网页交互的脚本(基本上是DOM元素)。

现在,你的方法将它们包含在清单中的区别在于,如果它们被包含在清单中,当页面加载时内容脚本将立即加载,因此(在这种情况下)将同时自动填充数据,而chrome.tabs.executeScript(tabs[0].id, {file: "xyz.js"});将在某个触发事件时加载内容脚本,因此(在这种情况下)将在触发时自动填充数据(例如在按钮点击时)。

这里有所有注入内容脚本的方法。


现在我知道如果我在manifest.json中包含内容脚本,我可以在页面刷新后立即加载内容脚本。但是如果我想将内容脚本保留在清单中,但只想在单击按钮时触发该脚本,该怎么办? - Parag Bandewar
在这种情况下,将代码放在一个函数内,在单击按钮时调用它。 - Chirag Arora
有关 https://stackoverflow.com/questions/44909642/how-to-get-background-script-to-call-function-in-content-script-for-chrome-exten 的任何想法? - SuperUberDuper

6
实际上,在Chrome扩展中执行脚本是使用内容脚本的另一种方式。内容脚本也可以在扩展程序的清单中定义。
简而言之,内容脚本可以访问扩展API的一小部分,并完全处理页面的DOM。如果它们在清单中定义,它们将在自动导航时加载到页面中,或者您可以使用API注入它们,但最终结果是相同的。
后台脚本无法访问页面的DOM,但可以完全访问扩展的API。
在后台脚本中存储扩展程序的状态,因为它存在于浏览器关闭之前。
这里有更详细的关于Chrome扩展架构的信息,您还可以在那里找到有关内容和后台脚本的信息。 https://developer.chrome.com/extensions/overview

4
拥有 background.js 文件和内容脚本 的主要目的是提高扩展性能。例如,如果你有一个在点击时显示某些内容的扩展程序,则可以将其保持简单。主要功能可以编写在 background.js 和其他内容脚本中,这些脚本将填充我们保持简单的视图。
简单来说,拥有 background.js内容脚本 可以提高效率,这也是 Google 扩展开发人员建议的做法。最后,你正在运行的文件本身就是一个内容脚本,因为它与网页交互。希望你已经在 manifest.json 文件的内容脚本部分中添加了该文件的条目。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接