Загрузка аддона Mozilla слишком поздняя, ​​чтобы заблокировать ресурс - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь отменить запросы от studio.code.org на www.google.com/jsapi, чтобы помочь странице быстрее загружаться go. В моем регионе Google заблокирован, но браузер ждет 75 секунд, прежде чем сдаться. Я хотел бы предотвратить задержку, заблокировав запрос (и страница, кажется, работает нормально без jsapi).

Я следовал примеру с https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/onBeforeRequest, установил аддон. Я включил оператор console.log, чтобы увидеть, что мой код вызывается, но он появляется только после того, как браузер подождет еще 75 секунд, пытаясь загрузить ресурс, который я надеялся заблокировать.

Я открыт для других подходит, если это не сработает.

манифест. json:

{
  "manifest_version": 2,
  "name": "cancel-google",
  "version": "1.0",

  "permissions": [
    "webRequest",
    "webRequestBlocking"
  ],

  "content_scripts": [
    {
      "matches": ["https://studio.code.org/*"],
      "js": ["cancel-google.js"]     
    } 
  ]
}

cancel-google. js:

// match pattern for the URLs to block
var pattern = "*www.google.com/jsapi";
console.log("cancelator script loaded");

// cancel function returns an object
// which contains a property `cancel` set to `true`
function cancel(requestDetails) {
  console.log("Cancelling: " + requestDetails.url);
  return {cancel: true};
}

// add the listener,
// passing the filter argument and "blocking"
browser.webRequest.onBeforeRequest.addListener(
  cancel,
  {urls: [pattern]},
  ["blocking"]
);

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

cancel-google. js должен быть загружен как фоновый скрипт, что верно для большинства API WebExtension.

{
    "name": "Your Addon",
    "manifest_version": 2,
    "background": {
        "scripts": ["cancel-google.js"]
    }
}

Тогда это должно работать.

0 голосов
/ 04 марта 2020

Smile4ever ответ правильный, но я обнаружил некоторые другие проблемы с моим исходным кодом.

Во-первых, проблема с синхронизацией в моем исходном контент-скрипте была из-за красной сельди. Хотя оригинальный скрипт содержимого будет записывать в журнал страницы, он не влияет на загрузку ресурсов. Тот же сценарий, что и фоновый сценарий, не будет ничего записывать (что я заметил) в журнал консоли, но он будет работать.

Во-вторых - фоновый сценарий требует больше разрешений, чем я изначально (больше, чем описаны в mozilla.org по ссылке ).

"permissions": [
  "http://*/*",
  "https://*/*",
  "webRequest",
  "webRequestBlocking" ]

Вышеуказанные разрешения являются адекватными / чрезмерными; Вы также можете заменить "http(s)://*/*" фактическими URL-адресами страниц, запрашивающих ресурс и ресурс, который необходимо заблокировать.

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