¿Se supone que la extensión web también debe interceptar la solicitud web en las secuencias de comandos?
Creé una extensión con los siguientes permisos
"permissions": [ "webRequest", "webRequestBlocking", "<all_urls>" ]El siguiente background.js funciona muy bien en una pestaña del navegador
function listener(details) { let filter = browser.webRequest.filterResponseData(details.requestId); let url = details.url; let method = details.method; // for other usefull informations // see https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/onBeforeRequest#details filter.onstart = event => { if (url.indexOf("foo.json") != -1) { console.log("started"); let encoder = new TextEncoder(); filter.write(encoder.encode(`<html><body>OK</body></html>`)); filter.close(); } else { filter.disconnect(); } } } browser.webRequest.onBeforeRequest.addListener( listener, {urls: ["<all_urls>"]}, ["blocking"] );Funciona muy bien = sirve el texto "OK" si agrego "foo.json" para cualquier URL en cualquier sitio. Esto es lo que esperaba.
Pero no del todo en un guión.
fetch('foo.json').then(function(response) { if(response.ok) { debugger; } else { console.log('network exception'); } }) .catch(function(error) { console.log('fetch failed: ' + error.message); });La respuesta no está bien: contiene el 404 original emitido por el sitio