WebExtensions: browser.webRequest.onCompleted никогда не срабатывает

Я использую API Firefox WebExtensions со следующими фоновый скрипт

var log = console.log.bind(console)

log('hello world from browser extension')

// https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/webRequest/onCompleted
var filter = { urls: '<all_urls>' }
var extraInfoSpec = ['tlsInfo', 'responseHeaders']

browser.webRequest.onCompleted.addListener(function(details){
    log(`Woo got a request, here's the details!`, details)
}, filter, extraInfoSpec) 

log('Added listener')

После загрузки скрипта из about:debugging я вижу следующий вывод в DevTools:

привет мир из расширения браузера

Я не вижу никаких выходных данных — нет данных от browser.webRequest.onCompleted.addListener и нет сообщения «Добавлен слушатель».

Как заставить browser.webRequest.onCompleted работать?

Для полноты мой manifest.json ниже:

{
    "manifest_version": 2,
    "name": "Test extension",
    "version": "1.0",
    "description": "Test extension.",
    "icons": {
        "48": "icons/border-48.png"
    },
    "content_scripts": [
        {
            "matches": ["<all_urls>"],
            "js": ["content.js"]
        }
    ],
    "permissions": [
        "webRequest",
        "webRequestBlocking"
    ]
}

person mikemaccana    schedule 20.06.2018    source источник


Ответы (1)


API webRequest доступен только для фоновые сценарии. Кажется, вы используете его внутри скрипта контента.

  1. urls в var filter = { urls: '<all_urls>' } должен быть массивом ['<all_urls>'].
  2. 'tlsInfo' в extraInfoSpec не существует, я не знаю, откуда он взялся.
  3. Вам необходимо указать дополнительное разрешение <all_urls> в манифесте.

script.js

var filter = { urls: ['<all_urls>'] }
var extraInfoSpec = ['responseHeaders']

browser.webRequest.onCompleted.addListener(function(details){
    console.log(`Woo got a request, here's the details!`, details)
}, filter, extraInfoSpec) 

console.log('Added listener')

manifest.json

{
    "manifest_version": 2,
    "name": "Test extension",
    "version": "1.0",
    "description": "Test extension.",
    "icons": {
        "48": "icons/border-48.png"
    },
    "background": {
      "scripts": ["script.js"]
    },
    "permissions": [
        "webRequest",
        "webRequestBlocking",
        "<all_urls>"
    ]
}
person evilpie    schedule 21.06.2018
comment
Просто хотел сказать спасибо. 1 и 3 нуждаются в исправлении, 2 — из предложения EFF tlsInfo (но оказывается, что вместо этого Mozilla использует другую реализацию searchfox.org/mozilla-central/rev/) - person mikemaccana; 22.06.2018