如何将内容脚本附加到 webextensions 中的选项卡
How to attach content script to a tab in webextensions
首先感谢大家的帮助和支持。
如果我想将内容脚本附加到我没有其 ID 的选项卡。单击扩展程序的按钮时,将打开该选项卡,如下所示。
function openIndexPage() {
browser.tabs.create({
"url": "data/index-page.html"
});
} //end openIndexPage
browser.browserAction.onClicked.addListener(openIndexPage);
如何将内容脚本附加到 index-page.html
?我不能使用正常的 HTML <script></script>
来附加它,因为它需要访问存储。你能帮我解决这个难题吗?
您不能将内容脚本从您的扩展程序注入 HTML 页面,也没有必要这样做。
HTML 从您的扩展中加载的页面,作为选项卡、window、选项页面、弹出窗口等,被加载到后台上下文中。这与您的后台脚本 运行 的上下文相同。但是,与此类 HTML 页面关联的脚本(即在 <script>
标记引用的单独 JavaScript 文件中)运行 在该页面的范围内。他们可以访问您的后台脚本可用的所有 chrome.*
/browser.*
API。如果他们愿意,他们可以获得对后台上下文中其他范围的引用。如果您想了解有关此类脚本之间通信的更多信息,请参阅:
因此,无需将内容脚本加载到此类页面中。页面中的脚本 运行ning 已经可以访问该页面的 DOM 和所有特权扩展 API。此类脚本不仅限于内容脚本可用的 API。
旁注:内容脚本附加到选项卡的内容,而不是选项卡
内容脚本本身并未附加到选项卡。它们被注入到当前显示在选项卡中的内容中。这通过具有匹配 URL 的 manifest.json content_scripts
条目发生,或者通过调用 tabs.executeScript()
将其注入指定的标签。如果将不同的内容加载到选项卡中,则内容脚本将被销毁。因此,它附加到内容,而不是实际的选项卡。换句话说,当标签更改为新URL时,它不会自动重新加载,除非URL匹配A manifest.json [= 13 = 13 =]条目或tabs.executeScript()
被再次调用。
首先感谢大家的帮助和支持。
如果我想将内容脚本附加到我没有其 ID 的选项卡。单击扩展程序的按钮时,将打开该选项卡,如下所示。
function openIndexPage() {
browser.tabs.create({
"url": "data/index-page.html"
});
} //end openIndexPage
browser.browserAction.onClicked.addListener(openIndexPage);
如何将内容脚本附加到 index-page.html
?我不能使用正常的 HTML <script></script>
来附加它,因为它需要访问存储。你能帮我解决这个难题吗?
您不能将内容脚本从您的扩展程序注入 HTML 页面,也没有必要这样做。
HTML 从您的扩展中加载的页面,作为选项卡、window、选项页面、弹出窗口等,被加载到后台上下文中。这与您的后台脚本 运行 的上下文相同。但是,与此类 HTML 页面关联的脚本(即在 <script>
标记引用的单独 JavaScript 文件中)运行 在该页面的范围内。他们可以访问您的后台脚本可用的所有 chrome.*
/browser.*
API。如果他们愿意,他们可以获得对后台上下文中其他范围的引用。如果您想了解有关此类脚本之间通信的更多信息,请参阅:
因此,无需将内容脚本加载到此类页面中。页面中的脚本 运行ning 已经可以访问该页面的 DOM 和所有特权扩展 API。此类脚本不仅限于内容脚本可用的 API。
旁注:内容脚本附加到选项卡的内容,而不是选项卡
内容脚本本身并未附加到选项卡。它们被注入到当前显示在选项卡中的内容中。这通过具有匹配 URL 的 manifest.json content_scripts
条目发生,或者通过调用 tabs.executeScript()
将其注入指定的标签。如果将不同的内容加载到选项卡中,则内容脚本将被销毁。因此,它附加到内容,而不是实际的选项卡。换句话说,当标签更改为新URL时,它不会自动重新加载,除非URL匹配A manifest.json [= 13 = 13 =]条目或tabs.executeScript()
被再次调用。