Как указать разные шаблоны соответствия для нескольких сценариев контента в файле manifest.json того же расширения

Вот сценарий:

Сценарий 1: Я хочу добавить различные сценарии контента на разные страницы на основе домена URL.

Для примера: Inject cs1.js content script в www.a.com, но введите cs2.js content script в www.b.com. Оба сценария содержимого cs1.js и cs2.js являются частью одного и того же расширения chrome. Так как я могу указать разные шаблоны соответствия (в разделе "matches" при определении "content_scripts" в файле manifest.json), чтобы один script вводится на одной странице, а другая - на другой странице.

Сценарий 2: Как я могу упомянуть, если под субдоменом сказать www.a.com, я хочу вставить контент script на все страницы в домене кроме www.b.a.com (все остальные поддомены нужно вводить с помощью содержимое script). Как указать шаблон соответствия для этого случая.

Спасибо заранее.

Ответ 1

Указание content_scripts внутри manifest.json является немного ограничивающим. Хотя вы можете указать разные шаблоны соответствия, вы можете выполнить только одно возможное количество файлов.

Чтобы достичь того, чего вы хотите, вам нужно настроить background_page, который может интерпретировать URL-адреса страниц, и запускать сценарии содержания по своему усмотрению.

Существуют три разных метода:

  • Используйте манифест content_scripts для соответствия всем возможным URL-адресам и выполните простой контент script, чтобы отправить запрос на фоновый рисунок с помощью chrome.extension.sendRequest(). Фоновая страница прослушивает сообщения с chrome.extension.onRequest.addListener(), получает сообщение, интерпретирует URL-адрес вкладки с sender.tab.url (или имеет сообщение табуляции window.location.hostname, возможно, проще), затем решает, какие скрипты содержимого следует вводить на вкладку с помощью chrome.tabs.executeScript().

    или

  • Просто попросите background_page прослушать chrome.tabs.onCreated.addListener() и chrome.tabs.onUpdated.addListener(), чтобы получить URL-адрес вкладки, а затем решить, какие скрипты содержимого следует вводить на вкладку с помощью chrome.tabs.executeScript(). Не нужно указывать content_scripts в манифесте для этого.

    или

  • Аналогично 1, но у вашего манифеста content_scripts script выяснить, что делать на основе текущего URL-адреса (снова можно интерпретировать window.location.hostname), затем используйте chrome.extension.sendRequest() с сообщением для вашего background_page, в котором указывается, какие скрипты содержимого должны выполняться (что означает, что ваш background_page не принимает решения - исходный контент script). Тем не менее, тот же результат.