Injecter dans la page d'erreur de navigation obtient: Erreur: Aucune fenêtre correspondant {"matchesHost": }

J'essaie d'exécuter un script qui montre une bordure verte dans l'onglet spécifié (par ID). Le script doit s'exécuter lorsque la réponse de l'URL demandée est une erreur. Le problème est que lorsque je charge l'extension depuis about:debugging , j'obtiens l'erreur suivante (dans la console du navigateur dans FF 53):

 Error: No window matching {“matchesHost”:[“<all_urls>”]} 

J'ai cherché des heures et des heures et j'ai regardé plusieurs messages pour des problèmes similaires, mais aucun d'entre eux ne m'a aidé. Par exemple, cette publication suggère d'ajouter "<all_urls>" permission et cela n'a pas aidé dans mon cas. Une autre publication indique qu'il n'est pas possible d'exécuter des scripts dans certains types d'hôtes tels que about:[anything] pages et les pages Mozilla. Je ne vois pas que mon URL appartient à aucun d'entre eux.

Voici mon exemple:

The manifest.json

 { "manifest_version": 2, "name": "test", "version": "1.0", "background": { "scripts": ["test.js"] }, "permissions": [ "<all_urls>", "activeTab", "tabs", "storage", "webRequest" ] } 

Le script de fond est test.js :

  console.log("-- inside js file --"); var target = "<all_urls>"; function logError(responseDetails) { errorTab=responseDetails.tabId; console.log("response tab: "+errorTab); var makeItGreen = 'document.body.style.border = "5px solid green"'; var executing = browser.tabs.executeScript(errorTab,{ code: makeItGreen }); }//end function browser.webRequest.onErrorOccurred.addListener( logError, {urls: [target], types: ["main_frame"]} ); 

L'erreur que vous voyez:

 Error: No window matching {"matchesHost":["<all_urls>"]} 

Est généré lorsque vous essayez d'injecter un script en utilisant tabs.executeScript() (ou CSS avec tabs.insertCSS() ) dans un onglet qui affiche actuellement une URL sur laquelle vous n'avez pas la permission d'injecter. Dans ce cas, vous avez spécifié dans votre manifeste.json l'autorisation hôte "<all_urls>" . Le fait que "matchesHost":["<all_urls>"] s'affiche indique que Firefox est au courant de votre "<all_urls>" permission. Que vous avez toujours eu l'erreur, vous avez tenté d'injecter dans une URL qui ne correspond pas à <all_urls> .

Comme vous l'avez mentionné, Firefox ne permet pas d'injecter des pages about:* . En outre, l'injection dans des pages au domaine addons.mozilla.org n'est pas autorisée. Aucune de ces pages ne correspond à <all_urls> . Toutes ces URL généreront l'erreur ci-dessus si vous essayez d'injecter dans les onglets qui les montrent.

Mais, je m'invente dans une URL normale qui a eu une erreur

Toutes les informations facilement accessibles au contraire – y compris l'URL fournie dans les tabs.Tab données obtenues à partir de tabs.get() -, la page dans laquelle vous essayez d'injecter est en fait une about:* page about:* , pas la page ( Cela n'existe pas) à l'URL où vous avez eu l'erreur. Alors que l'URL signalée dans la structure tabs.tab pour l'onglet dans lequel vous avez reçu l'erreur affichera l'URL sur laquelle l'erreur s'est produite, l'URL réelle de la page affichée est quelque chose comme:

 about:neterror?e=dnsNotFound&u=[URL you were attempting to get to, but encoded as a query string] 

Je le sais parce que le dernier événement webNavigation.onDOMContentLoaded lorsque j'ai essayé de charger l'URL: http://www.exampleahdsafhd.com/ était:

 webNavigation.onDOMContentLoaded - > arg[0] = Object { url: "about:neterror?e=dnsNotFound&u=http%3A//www.exampleahdsafhd.com/&c=UTF-8&f=regular&d=Firefox%20can%E2%80%99t%20find%20the%20server%20at%20www.exampleahdsafhd.com.", timeStamp: 1497389662844, frameId: 0, parentFrameId: -1, tabId: 2, windowId: 3 } 

Le fait que la page d'erreur est une about:* page, signifie que vous ne pourrez pas injecter des scripts, ou CSS, dans celui-ci. Cela signifie que vous devrez trouver une autre façon d'accomplir ce que vous désirez et / ou d'adapter ce que vous désirez faire à ce qui est possible. Une possibilité serait de naviguer vers une page de votre extension qui décrit l'erreur.