2017-10-03 1 views
0

J'ai un test d'extension Chrome qui fonctionne sur <all_urls>. Il exécute un content_script qui écrit simplement le domaine.Charge content_script.js lorsque ERR_NAME_NOT_RESOLVED

Cela fonctionne correctement dans tous les cas, sauf lorsque j'écris des domaines qui n'existent pas.

Le but de l'extension est de s'exécuter sur un domaine particulier, indépendamment de ce qu'il se passe. Par conséquent, je veux m'assurer qu'il fonctionne aussi quand je tape ERR_NAME_NOT_RESOLVED.

Des idées sur la façon de l'atteindre?


manifest.json

{ 
    "manifest_version": 2, 

    "name": "Test", 
    "version": "1.0", 

    "content_scripts": [ 
    { 
     "matches": ["<all_urls>"], 
     "js": ["content_script.js"] 
    } 
    ], 

    "permissions": [ 
    "<all_urls>" 
    ] 

} 

content_script.js

window.console.log(window.document.location.hostname); 
+0

Pas possible. La page dans cet état ne prend pas en charge l'exécution de scripts de contenu. – wOxxOm

+0

J'ai trouvé qu'il pourrait être possible de réaliser quelque chose de similaire avec webRequest, mais je ne sais pas si cela serait possible sans qu'un domaine soit résolu. – nitobuendia

Répondre

1

Dans le cas où vous essayez de visiter un domaine inexistant, vous êtes montré une erreur interne Chrome page avec une URL data:.

Ce n'est pas un match valide même pour <all_urls>, de sorte que vous ne pouvez jamais injecter dans de telles pages.

Si vous devez capturer des échecs de navigation, vous pouvez le faire via les API webNavigation ou webRequest à partir d'une page d'arrière-plan; mais vous ne serez pas en mesure de modifier les pages d'erreur.

+0

Vous donne la réponse valide car c'est le résumé. De toute façon, j'ai complété ma réponse au cas où quelqu'un voudrait une réponse plus concrète. Merci! – nitobuendia

1

trouvé une réponse:

Alors que content_script n'est pas possible, vous pouvez interagir avec la demande avec webRequest et y apporter des modifications. Cela répond à mes besoins.

Il existe quelques exemples sur Chrome Developer documentation. Sinon, voici mon nouveau code:


manifest.json

{ 
    "manifest_version": 2, 

    "name": "Lazy ShortCuts", 
    "version": "1.0", 

    "background": { 
    "scripts": ["background.js"] 
    }, 

    "permissions": [ 
    "<all_urls>", 
    "webRequest", 
    "webRequestBlocking", 
    ] 

} 

background.js

chrome.webRequest.onBeforeRequest.addListener(
    function(info) { 
    console.log("Data intercepted: ", info); 
    return {redirectUrl: 'https://google.com'}; 
    }, 
    { 
    urls: [ 
     "<all_urls>", 
    ] 
    }, 
    ["blocking"] 
);