所有类型的 Chrome 扩展脚本如何工作?
How do all types of Chrome extension scripts work?
我是 Chrome 扩展的新手,想了解所有类型的 scripts/pages 是如何工作的。
这是我的理解:
首先 - 有 "content scripts" 个应该用于实际修改页面的。
其次 - 有一个 "background script",旨在像服务器一样工作,您可以从中发送和接收消息,但它不会修改页面的 DOM;因此它可以执行诸如处理存储和脚本之间的通信之类的任务,但不能修改页面。
最后 - 还有 "popup scripts",它们与内容脚本和后台脚本分开,但您仍然可以在它们之间 send/receive 消息。
弹出脚本不能直接修改页面(与后台脚本相同),它们只能向其他两个发送消息。
您根本不在清单文件中声明它们,您可以直接在弹出 html 文件中使用它们。
最后只有内容脚本才能真正修改页面。
我说的对吗?
一个 Chrome 扩展文档 Link 来统治它们,一个 Link 来找到它们,
一个 Link 把他们全部带到黑暗中 bind()
他们1:
>> Architecture Overview <<
(艺术家的印象)
它应该可以回答您的许多问题。但是,这将是一个糟糕的 SO 答案,所以我的总结是:
Background page/scripts: 每个扩展只有一页。它是不可见的,永远不会显示在选项卡中。通常,只要 Chrome 打开,它就会打开,但也有例外。由于它始终存在并且具有对 Chrome API 的最高级别访问权限,因此它经常用于扩展部分之间的主要逻辑/事件路由。简而言之,后台工作。
Event page/scripts: 后台页面变种,如果没有代码就卸载运行。这节省了内存,但引入了维护状态的复杂性。 Chrome 记住应该监听哪些事件(通过 addListener
)并在它们发生时再次加载页面。因此,活动页面。
除此之外,扩展可以有其他可见页面。您可以在选项卡中打开它们(它们将具有 chrome-extension://extensionidgoeshere/page.html
地址),并且它们将具有相同级别的 Chrome API 访问权限。两种 UI 类型对于扩展来说是特殊的:
Browser/Page 操作弹出窗口: 一个小的 window,通过单击相应的 UI 元素打开。不幸的是,它也非常脆弱——一旦失去焦点就会关闭。除此之外,它只是一个扩展页面。
选项页面:有两种口味。 Version 1 Options page is just a tab that's opened when invoking options for an extension; Version 2 Options page 可以选择显示在 chrome://extensions/
内的特殊框中。同样,除此之外,它只是一个具有扩展权限的页面。
最后,拥有一堆页面很有趣,但如果您想与现有 pages/tabs 交互,则需要在其中注入脚本。
Content Scripts are scripts that run alongside pages; for compatibility reasons, they run in an isolated world。出于安全原因,他们对 Chrome API 的访问受到严格限制。但他们与页面共享 DOM,因此可以修改它。
页面级脚本 是您在文档中几乎找不到的东西(如 "DOM injected scripts"), but they are very useful to break the barrier between extension JavaScript and page's own JavaScript. A good overview of them is presented in this answer by the magnificent Rob W.
定义了所有相关的扩展部分后,文档页面还简要提到了它们之间的通信方式。要更深入地了解这方面,请参阅 this answer (again by Rob W) and the Messaging documentation。
1 说真的,每个新手扩展开发人员都需要阅读它,并且此页面在文档中并不突出。干得好,Google。
我是 Chrome 扩展的新手,想了解所有类型的 scripts/pages 是如何工作的。
这是我的理解:
首先 - 有 "content scripts" 个应该用于实际修改页面的。
其次 - 有一个 "background script",旨在像服务器一样工作,您可以从中发送和接收消息,但它不会修改页面的 DOM;因此它可以执行诸如处理存储和脚本之间的通信之类的任务,但不能修改页面。
最后 - 还有 "popup scripts",它们与内容脚本和后台脚本分开,但您仍然可以在它们之间 send/receive 消息。
弹出脚本不能直接修改页面(与后台脚本相同),它们只能向其他两个发送消息。
您根本不在清单文件中声明它们,您可以直接在弹出 html 文件中使用它们。
最后只有内容脚本才能真正修改页面。
我说的对吗?
一个 Chrome 扩展文档 Link 来统治它们,一个 Link 来找到它们,
一个 Link 把他们全部带到黑暗中 bind()
他们1:
>> Architecture Overview <<
它应该可以回答您的许多问题。但是,这将是一个糟糕的 SO 答案,所以我的总结是:
Background page/scripts: 每个扩展只有一页。它是不可见的,永远不会显示在选项卡中。通常,只要 Chrome 打开,它就会打开,但也有例外。由于它始终存在并且具有对 Chrome API 的最高级别访问权限,因此它经常用于扩展部分之间的主要逻辑/事件路由。简而言之,后台工作。
Event page/scripts: 后台页面变种,如果没有代码就卸载运行。这节省了内存,但引入了维护状态的复杂性。 Chrome 记住应该监听哪些事件(通过 addListener
)并在它们发生时再次加载页面。因此,活动页面。
除此之外,扩展可以有其他可见页面。您可以在选项卡中打开它们(它们将具有 chrome-extension://extensionidgoeshere/page.html
地址),并且它们将具有相同级别的 Chrome API 访问权限。两种 UI 类型对于扩展来说是特殊的:
Browser/Page 操作弹出窗口: 一个小的 window,通过单击相应的 UI 元素打开。不幸的是,它也非常脆弱——一旦失去焦点就会关闭。除此之外,它只是一个扩展页面。
选项页面:有两种口味。 Version 1 Options page is just a tab that's opened when invoking options for an extension; Version 2 Options page 可以选择显示在 chrome://extensions/
内的特殊框中。同样,除此之外,它只是一个具有扩展权限的页面。
最后,拥有一堆页面很有趣,但如果您想与现有 pages/tabs 交互,则需要在其中注入脚本。
Content Scripts are scripts that run alongside pages; for compatibility reasons, they run in an isolated world。出于安全原因,他们对 Chrome API 的访问受到严格限制。但他们与页面共享 DOM,因此可以修改它。
页面级脚本 是您在文档中几乎找不到的东西(如 "DOM injected scripts"), but they are very useful to break the barrier between extension JavaScript and page's own JavaScript. A good overview of them is presented in this answer by the magnificent Rob W.
定义了所有相关的扩展部分后,文档页面还简要提到了它们之间的通信方式。要更深入地了解这方面,请参阅 this answer (again by Rob W) and the Messaging documentation。
1 说真的,每个新手扩展开发人员都需要阅读它,并且此页面在文档中并不突出。干得好,Google。