我已经开发了一个Chrome Extension,它的工作原理绝对很好。
manifest.json
的一部分看起来像这样:
"content_scripts":[
{
"js":["js/script.js"],
"css": ["css/style.css"],
"matches": ["http://localhost/*", "https://localhost/*"]
}
],
因此,仅当域是localhost
时,扩展名才会注入内容脚本,这也可以正常工作。现在,我想要一种扩展弹出窗口可以具有 enable extension on this domain
或 disable extension on this domain
的方法>。
我已经在多个广告障碍插件中看到,所以我想应该有可能。
这需要两个部分:
程序化脚本注入
现在有chrome.scripting.registerContentScripts()
API,它使您可以编程注册内容脚本。
chrome.scripting.registerContentScripts([{
id: "a-script",
matches: ['https://your-dynamic-domain.example.com/*'],
js: ['content.js']
}]);
获得新的权限
通过使用chrome.permissions.request
,您可以添加可以在其中注入内容脚本的新域。一个例子是:
// In a content script, options page or popup
document.querySelector('button').addEventListener('click', () => {
chrome.permissions.request({
origins: ['https://your-dynamic-domain.example.com/*']
}, granted => {
if (granted) {
/* Use contentScripts.register */
}
});
});
为此,您必须通过在manifest.json
{
"optional_permissions": [
"http://*/*",
"https://*/*"
]
}
也有工具可以为您和最终用户提供进一步简化的工具,例如 webext-domain-permission-toggle
和webext-dynamic-content-scripts
,许多与GITHUB相关的扩展程序都使用,以增加对自托管GitHub安装的支持。
他们还将在下一个浏览器启动中注册您的脚本,并允许用户删除新的权限和脚本。
Google正在研究扩展清单V3的程序化脚本注册。新的API将被称为Chrome.scripting.RegisterContentscript,并且几乎与Firefox已经拥有的内容相匹配,减去API的直观命名。您可以在此Chrome Bug中遵循实现状态。