Как запустить background.js только по конкретным ссылкам? - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь написать расширение Chrome, которое закрывает вкладки, когда они загружены, если их ссылки содержат определенные слова / строки. Я намеревался решить эту проблему с помощью оператора matches в manifest.json. К сожалению, это не работает. Мой manifest.json выглядит так:

{
  "manifest_version": 2,
  "name": "Chrome Extension",
  "version": "0.1",
   "permissions": [
    "tabs"
  ],
  "content_scripts": [
    {
      "matches": [
       "<all_urls>"
      ],
      "js": ["content.js"]
    }
  ],
  "background": {
          "matches": [
               "https://www.google.de/",
                "https://sghm.eu/iserv/login"
          ],
          "scripts": ["background.js"],
          "persistent": true
  }
}

А мой background.js выглядит так:

chrome.tabs.onUpdated.addListener( function (tabId, changeInfo, tab) {
  if (changeInfo.status == 'complete') {
      console.log('background running');
      chrome.tabs.remove(tabId, function() { });
  }
})

По моему мнению, я четко выразил, чтоскрипт работает только на google и sghm.eu, так почему он запускается на каждой загруженной странице?

1 Ответ

2 голосов
/ 31 октября 2019

Проблемы:

  • В разделе «фон» не может быть «совпадений», как вы можете видеть в документации . Фоновый сценарий выполняется на отдельной скрытой фоновой странице, не связанной с вкладками.

  • Сценарий содержимого, объявленный в вашем manifest.json, запускается для всех URL-адресов. Для задачи, которую вы хотите достичь, вам вообще не нужен скрипт контента.

Решение состоит из нескольких шагов:

  1. Удаление раздела «content_scripts»
  2. Удалите «совпадения» из раздела «фон»
  3. Переключитесь на сценарий страницы событий, указав "persistent": false
  4. Добавить «webNavigation» разрешение вmanifest.json и используйте его для обнаружения URL-навигации.

background.js:

chrome.webNavigation.onCompleted.addListener(closeTab, {
  url: [
    {urlPrefix: 'https://www.google.de/'},
    {urlPrefix: 'https://sghm.eu/iserv/login'},
  ]
});

function closeTab(e) {
  if (!e.frameId) {
    chrome.tabs.remove(e.tabId);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...