Как убедиться, что контент-скрипт будет загружен в каждый документ с помощью tabs.executeScript? - PullRequest
0 голосов
/ 08 июля 2019

Для моего расширения FF я использовал content_scripts для ввода manifest.json с matches: ['<all_urls>'], но теперь я переключаюсь на программные инъекции, используя browser.tabs.executeScript.

Как я могу убедиться, что скрипт загружен в каждый кадр на каждой вкладке? Нужно ли прослушивать изменения URL вкладки с помощью browser.tabs.onUpdated или, в качестве альтернативы, для события DOMContentLoaded с использованием browser.webNavigation.onDOMContentLoaded? Или есть более элегантный способ сделать это?

Проблема с browser.tabs.onUpdated заключается в том, что он не будет запускать изменения URL-адресов iFrames с id! == 0. Поэтому я экспериментировал с browser.webNavigation.onDOMContentLoaded, чтобы преодолеть эту проблему (пример упрощенного кода):

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

Причина всего этого заключается в том, что я хочу позволить пользователю разрешить отказаться от автоматической загрузки скриптов контента и вместо этого делать это вручную через pageAction, а также отказаться от инъекций в iFrames. Поэтому на DOMContentLoaded эти 2 параметра будут проверены до того, как произойдут какие-либо инъекции.

В комментарии к другому вопросу дружественный пользователь предложил мне даже не нужен другой API (например, webRequests), и что tabs.executeScript будет достаточно - интересно, как? Есть ли другой способ условного внедрения скриптов содержимого?

...