如何确保使用tabs.executeScript将内容脚本加载到每个文档中?

时间:2019-07-08 13:00:24

标签: firefox-addon firefox-webextensions

对于我的FF扩展名,我在content_scripts中使用了manifest.json中的matches: ['<all_urls>']键,但是现在我使用browser.tabs.executeScript切换到程序化注入。

如何确保将脚本加载到每个选项卡的每个框架中?我是否必须使用browser.tabs.onUpdated监听选项卡的URL更改,或者使用DOMContentLoaded来监听browser.webNavigation.onDOMContentLoaded事件? 还是有一种更优雅的方法?

browser.tabs.onUpdated的问题在于,它不会在ID为!== 0的iFrame的URL更改上触发。 因此,我尝试使用browser.webNavigation.onDOMContentLoaded来解决此问题(简化的代码示例):

    browser.webNavigation.onDOMContentLoaded.addListener(infos => {
        const { tabId, frameId } = infos;
        browser.tabs.executeScript(tabId, {
            file: '../path/to/content-script.js',
            frameId
        });
    });

所有这些的原因是,我想让用户启用退出自动内容脚本加载的功能,而是通过pageAction手动进行加载,以及退出对iFrame的注入。因此,在DOMContentLoaded上,将在进行任何注入之前检查这2个设置。

comment to another question中,一位友好的用户建议我什至不需要其他API(例如webRequests),而tabs.executeScript就足够了-我想知道如何?有条件注入内容脚本的另一种方法吗?

0 个答案:

没有答案