【发布时间】:2017-09-14 14:23:32
【问题描述】:
我正在尝试编写一个简单的 Web 扩展。 目前我正在学习各种教程并尝试了解架构。
与特定选项卡的交互是通过注入网站源代码的 content_scripts 完成的。 在我看来,好像 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 的显式功能。此代码在其后台脚本之一中作为 Init() 函数的一部分执行:
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});
}
}
});
}
据我所知,代码在浏览器启动后立即执行。 这不是多余的吗?
他们的 manifest.json 应该负责 content_script 的执行,这里是相关代码:
"content_scripts": [
{
"matches": [
"<all_urls>"
],
"all_frames": true,
"js": [
"keycodes.js",
"content_script.js"
]
}
],
将脚本注入每个打开的选项卡的正确方法是什么?
【问题讨论】:
标签: javascript google-chrome google-chrome-extension firefox-addon-webextensions