Выполнить расширение chrome только в указанной папке веб-сайта c - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть расширение chrome, которое должно работать / выполняться только в указанной подпапке c веб-сайта, но не в других частях сайта

Я хочу, чтобы оно выполнялось только на https://example.com/subfolder1/sub_subfolder11/ но не включен https://example.com/subfolder1/ или https://example.com/subfolder2/ или https://example.com/subfolder3/

Это манифест .

 "permissions": [
    "storage",
    "declarativeContent",
    "https://example.com/subfolder1/subfolder2/*",
    "tabs", 
    "activeTab"

  ],
  "manifest_version": 2,
  "background": {
    "scripts": ["background.js"],
    "persistent": false
  },

  "web_accessible_resources": [
                            "style.css"
                        ],
  "content_scripts": [
    {
      "all_frames": true, 
      "css":        ["style.css"],
      "matches": ["https://example.com/subfolder1/sub_subfolder11/*"],
      "run_at": "document_end"
    }

Расширение работает / выполняется везде, а не только на https://example.com/subfolder1/sub_subfolder11/ Есть идеи, что я делаю не так?

ОБНОВЛЕНО, ПОЧЕМУ Я МОГУ КОММЕНТАРИЙ ТАКОЙ ДОЛГОЙ ТЕКСТ

Привет @wOxxOm, я видел тебя по многим другим вопросам, поэтому я хотел бы поблагодарить тебя за помощь.

В связи с моей проблемой у меня есть две вкладки (или более вкладок) на chrome. На одной из них у меня открыта https://example.com/subfolder1/sub_subfolder11/*, и содержимое этой вкладки содержит ссылки, указывающие на https://example.com/subfolder1/ or https://example.com/subfolder2/ or https://example.com/subfolder3/, и ссылки, открытые на новой вкладке (<a target="_blank"...).

Я пробовал также вручную вводить адреса (https://example.com/subfolder1/ or https://example.com/subfolder2/ or https://example.com/subfolder3/), открывая новые вкладки, но все равно расширение запускается.

На фоне. js Я пытался ничего там не делать и также имеет chrome .webRequest.onBeforeRequest.addListener (чтобы заблокировать определенные c javascript ссылки от загрузки), но все тот же.

Идея состоит в том, чтобы заблокировать загрузку сценариев на https://example.com/subfolder1/sub_subfolder11/*, но не блокировать эти сценарии на новой вкладке, когда я go вручную https://example.com/subfolder1/ or https://example.com/subfolder2/ or https://example.com/subfolder3/

Спасибо

1 Ответ

0 голосов
/ 09 апреля 2020

Похоже, вы ожидали, что delcaration content_scripts будет применяться к фоновому скрипту и API webRequest. Все это разные вещи для разных частей расширения.

Предполагая, что конечная цель состоит в том, чтобы заблокировать ресурс, когда на вкладке есть определенный URL-путь, вам нужно будет поддерживать карту идентификаторов вкладок и URL-адресов, которая будет использоваться слушателем webRequest:

const tabsToHook = {};

chrome.tabs.onUpdated.addListener((tabId, info) => {
  if (info.url) {
    if (info.url.startsWith('https://example.com/path1')) {
      tabsToHook[tabId] = true;
    } else {
      delete tabsToHook[tabId];
    }
  }
});

chrome.tabs.onRemoved.addListener(tabId => delete tabsToHook[tabId]);
chrome.tabs.onReplaced.addListener((_, removed) => delete tabsToHook[removed]);

chrome.webRequest.onBeforeRequest.addListener(info => ({
  cancel: tabsToHook[info.tabId],
}), {
  urls: ['http://example.com/some.js'],
  types: ['script'],
}, ['blocking']);

FWIW в Firefox 52+ слушатели webRequest могут вернуть Promise, поэтому весь код будет:

browser.webRequest.onBeforeRequest.addListener(async info => {
  const {url} = await browser.tabs.get(info.tabId);
  return {cancel: url.startsWith('https://example.com/path1')};
}, {
  urls: ['http://example.com/some.js'],
  types: ['script'],
}, ['blocking']);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...