chrome.webRequest.onBeforeRequest приводит к сбою загрузки некоторых функций веб-страниц - PullRequest
1 голос
/ 29 марта 2019

Я пишу расширение Chrome. Я хочу, чтобы он блокировал все страницы на en.wikipedia.org, КРОМЕ Главной страницы. Я использовал chrome.webRequest.onBeforeRequest, чтобы сделать это.

Вот код, который я использовал для фонового скрипта моего расширения Chrome:

chrome.webRequest.onBeforeRequest.addListener(
  function(details) {
    if (details.url=="https://en.wikipedia.org/wiki/Main_Page") {
      return {cancel: false};
    } else {
      return {cancel: true};
    }
  },
  {urls: ["https://en.wikipedia.org/*"]},
  ["blocking"]);

Этот код правильно блокирует все страницы Википедии, кроме Main_Page.

Отображает Main_Page, но показывает упрощенную версию без CSS.

Я пробовал это на других веб-сайтах (т. Е. Блок "https://www.reddit.com/*", за исключением точно" https://www.reddit.com/"),, и в этих других случаях некоторые элементы страницы не загружаются.

Почему это происходит? Могу ли я использовать chrome.webRequest.onBeforeRequest и правильно ли отображать веб-страницы?

Ответы [ 2 ]

0 голосов
/ 29 марта 2019

Если сайт использует подпути для своих ресурсов, а не отдельный поддомен, ваш шаблон URL будет уничтожать каждый такой ресурс, такой как CSS в Википедии.

Просто заблокируйте верхний URL, указав types filter:

chrome.webRequest.onBeforeRequest.addListener(
  info => ({
    cancel: !info.url.startsWith('https://en.wikipedia.org/wiki/Main_Page'),
  }),
  {
    urls: ['https://en.wikipedia.org/*'],
    types: ['main_frame', 'sub_frame'],
  },
  ['blocking']
);
0 голосов
/ 29 марта 2019

В следующем примере показано, как заблокировать все запросы к www.abc.com:

.
  chrome.webRequest.onBeforeRequest.addListener(
    function(details) {
      return {cancel: details.url.indexOf("://www.abc.com/") != -1};
    },
    {urls: ["<all_urls>"]},
    ["blocking"]);

Поскольку эта функция использует обработчик событий блокировки, для нее требуется разрешение "webRequest", а также разрешение "webRequestBlocking" в файле манифеста.

Следующий пример позволяет достичь той же цели более эффективным способом, поскольку запросы, не предназначенные для www.abc.com, не нужно передавать на расширение:

 chrome.webRequest.onBeforeRequest.addListener(
    function(details) { return {cancel: true}; },
    {urls: ["*://www.abc.com/*"]},
    ["blocking"]);

Подробнее: https://developer.chrome.com/extensions/webRequest

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...