我想写一个简单的Web扩展。 目前我正在关注各种教程并试图理解架构。Web扩展是否需要显式加载内容脚本?
与特定选项卡的交互是通过注入到网站源代码中的content_script完成的。 在我看来,仿佛content_scripts被自动加载: https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#Content_scripts
上MDN一个tutorial使得这个就更清楚了:
该脚本将被加载到匹配给 模式的网页content_scripts manifest.json键。该脚本直接访问文档的 ,就像页面本身加载的脚本一样。
我的扩展应该为每个文本选择提供一个上下文菜单。作为一个起点,我发现了一个有用的Chrome扩展示例。你可以在这里找到它https://developers.chrome.com/extensions/samples,它被称为“说话选择”
这个扩展名是用tts引擎读取选定的文本。 但是源代码的一部分令人困惑:它们有一个显式的功能来在选项卡中运行content_scripts。据
function loadContentScriptInAllTabs() {
chrome.windows.getAll({'populate': true}, function(windows) {
for (var i = 0; i < windows.length; i++) {
var tabs = windows[i].tabs;
for (var j = 0; j < tabs.length; j++) {
chrome.tabs.executeScript(
tabs[j].id,
{file: 'keycodes.js', allFrames: true});
chrome.tabs.executeScript(
tabs[j].id,
{file: 'content_script.js', allFrames: true});
}
}
});
}
我所看到的,因为浏览器启动时立即执行的代码:此代码为init()函数的一部分,他们的后台脚本中的一个执行。 这不是多余的?
他们的manifest.json应该照顾content_script执行的,这里是有关的代码:
"content_scripts": [
{
"matches": [
"<all_urls>"
],
"all_frames": true,
"js": [
"keycodes.js",
"content_script.js"
]
}
],
什么是注入一个脚本到每一个打开的选项卡的正确方法?
感谢您的快速回答。并且您包含在以前的答案中的链接非常有用 – lhk