在运行时设置content_script匹配

Setting the content_script matches at runtime

本文关键字:script 匹配 content 运行时 设置      更新时间:2023-09-26

我正在开发一个chrome扩展,需要一个content_script添加自定义控件到媒体播放器。但是,我希望允许用户通过选项控制面板(为他们的个人媒体服务器)设置播放器的域。

似乎内容脚本的域必须在清单中静态设置。Json文件在chrome扩展。有没有一种方法可以通过编程来设置?要实现这样的操作:

"content_scripts": [
  {
    "matches": ["<variable_from_config>"],
    "js": ["player.js"],
    "run_at": "document_start"
  }
]

您可以使用新的contentScripts.register() API,它完全符合您的要求:以编程方式注册内容脚本。

browser.contentScripts.register({
    matches: ['https://your-dynamic-domain.example.com/*'],
    js: [{file: 'content.js'}]
});

这个API只在Firefox中可用,但是你可以使用Chrome的polyfill。


要使其工作,您仍然需要对您想要注册脚本的域的权限,因此您可以在清单中使用optional_permissionschrome.permissions.request来让用户根据需要添加新域。

我还编写了一些工具来进一步为您和最终用户简化此操作,例如webext-domain-permission-togglewebext-dynamic-content-scripts。他们还将在下次浏览器启动时注册您的脚本,并允许用户删除新的权限和脚本。