首页 文章

动态修改FireFox扩展中的content_scripts.matches

提问于
浏览
1

因此,我正在尝试使用WebExtensions遵循firefox扩展的说明,并且我想将内容脚本附加到某些页面(如下所述:https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Modify_a_web_page) .

问题是当我编写扩展但从本地存储加载它时,我不想指定我希望在manifest.json中运行content_script的页面集,即,我有一个选项页面设置,用户可以在其中指定应该运行内容脚本的页面 . 是否可以动态更改通常使用manifest.json中的content_script指令设置的要修改的页面列表?

谢谢

2 回答

  • 1

    不,没有办法修改 manifest.json content_script (CSS或JavaScript)注入的URL . 指定的代码将注入所有匹配的URL中 . 这有多种原因 .

    这是不可能的原因之一是用户的安全性/透明性 . manifest.json显式声明您的内容脚本将修改哪些URL,声明它将修改活动选项卡,或者它将访问所有URL /选项卡 . 如果您被允许更改URL,那么您将有效地访问所有URL,而无需明确声明您正在这样做 .

    是的,有可能有办法宣布你会这样做 . Chrome有一个实验性的方法来使用chrome.declarativeContent . 在Chrome中,这被认为是实验性的,即使可以使用几年/几年 . 它在Firefox中不可用 . 什么时候可用,或者即使它在Firefox中可用也不清楚 . 此外,即使在Chrome中,它也缺少其他注入脚本方法的功能(例如 run_at / runAt ) .

    为了完全控制注射或不注射,您需要通过tabs.insertCSS()和/或tabs.executeScript()进行注射 . 使用这些方法注入或不注入脚本和CSS完全在扩展中的JavaScript控制之下 . 使用这些方法可以获得使用 manifest.json content_script 条目获得的类似功能,但具有更多控制权 . 这种更大的控制是以更大的复杂性为代价的 .

  • 0

    那个怎么样?有很多事件要听,你可以挑选任何满足你要求的事件:

    • onBeforeNavigate

    • onCommitted

    • onDOMContentLoaded

    • onCompleted .

    文档是here . 这是如何在 example.com 的子域上创建红色背景的示例 . 当然,您可以动态构建URL过滤器列表,这只是一个PoC:

    browser.webNavigation.onCommitted.addListener(
        function(details) {
            browser.tabs.insertCSS(details.tabId, {code: 'body {background:red}'})
        },
        {url: [{hostSuffix: '.example.com'}]}
    );
    

相关问题