Запрос блокировки в Chrome

Я пытаюсь заблокировать некоторые запросы в приложении Chrome.

Я создал прослушиватель JavaScript, который выполняет эту проверку:

chrome.webRequest.onBeforeRequest.addListener(
    {
        urls: ["*://site.com/test/*"]
    },
    ["blocking"]
);

Но запросы не блокируются. Я что-то пропустил в этом коде?

Мой манифест:

"background": {
        "scripts": ["listener.js"],
        "persistent": true
    },
"permissions": ["tabs", "http://*/*"],
    "manifest_version": 2,

Ответ 1

Похоже, вы неправильно поняли смысл "блокировки" здесь.

https://developer.chrome.com/extensions/webRequest.html#subscription

Если дополнительный массив opt_extraInfoSpec содержит строку 'blocking' (допускается только для определенных событий), обрабатывается функция обратного вызова синхронно. Это означает, что запрос блокируется до тех пор, пока функция обратного вызова возвращается. В этом случае обратный вызов может возвращать BlockingResponse, который определяет дальнейший жизненный цикл запрос.

Чтобы заблокировать запрос (отмените его), верните {cancel: true} в обработчик событий.

Например:

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

Это заблокирует все URL-адреса, соответствующие *://site.com/test/*.

Также не забудьте объявить как webRequest, так и webRequestBlocking разрешения в вашем манифесте.

Ответ 2

В Chrome 59 вы можете заблокировать определенные запросы на вкладке Сеть инструментов разработчика.

https://developers.google.com/web/updates/2017/04/devtools-release-notes#block-requests

Щелкните правой кнопкой мыши запрос на панели "Сеть" и выберите "Блокировать запрос URL". В ящике появляется новая вкладка блокировки запросов, которая позволяет вам управлять заблокированными запросами.

Sample

Ответ 3

Вы можете сделать следующее:

  • Создайте новый каталог.
  • Создайте файлы ниже.
  • Загрузите распакованное расширение в режиме разработчика с помощью chrome://extensions/

background.js

chrome.webRequest.onBeforeRequest.addListener(
  function(){ return {cancel: true}; },
  {
    urls: ["<all_urls>"], // Change this to a more specific pattern
    types: ["script"]
  },
  ["blocking"]
);

manifest.json

{
   "name": "Block request",
   "version": "1.0",
   "manifest_version": 2,
   "background": {
       "scripts": ["background.html"]
   },
   "permissions": [
       "webRequest",
       "webRequestBlocking",
       "<all_urls>"
   ]
}

Ответ 4

Вы можете использовать уже построенное расширение Google Chrome,

В моем случае я хотел также закрыть нежелательные вкладки:

Для блокирования запросов там http-request-blocker (проект github здесь), вам просто нужно настроить нежелательные запросы:

enter image description here

Для автоматического закрытия вкладок я использую расширение ad-close-gold, работает примерно так же.