web-dev-qa-db-fra.com

Les ressources doivent être répertoriées dans la clé de manifeste web_accessible_resources afin d'être chargées par des pages en dehors de l'extension

J'ai essayé de nombreuses façons (toutes les procédures documentées) pour injecter un script dans une page spécifique lors de la vérification de l'URL sur onUpdated.addListener. Enfin, le code ci-dessous avec 'executescript' semble fonctionner, mais pas parfaitement. Je pourrais obtenir des alertes mais je ne peux pas trouver des éléments de document de la page via getElementById/getElementsByName.

Lorsque j'ai inspecté la page, le script est injecté. Mais dans la console d'erreur, j'obtiens:

Refuser la charge de l'extension chrome: //jfeiadiicafjpmaefageabnpamkapdhe/js/Leoscript.js. Les ressources doivent être répertoriées dans la clé de manifeste web_accessible_resources afin d'être chargées par des pages en dehors de l'extension.

Manifest.json:

{
  "name": "Leo Extension for Job Boards",
  "version": "1.6",
  "manifest_version": 2,
  "content_security_policy": "script-src 'self'; object-src 'self'",
  "description": "Leo Extension",
  "background": {
    "scripts": ["js/Leojshelper.js"],
    "persistent": true
  },
  "content_scripts": [
    {
      "matches": ["<all_urls>"],
      "js": ["js/eventPage.js"],
      "run_at" : "document_start"
    }
  ],
  "icons":{"48":"images/bob48.png", "128":"images/bob128.png"}, //Define any icon sizes and the files that you want to use with them. 48/128 etc.
  "browser_action": {
    "default_icon": "images/bob.png",       // What icon do you want to display on the chrome toolbar
    "default_popup": "LeoExtwatch.html"     // The page to popup when button clicked.
  },
  "permissions": [
    "tabs", "<all_urls>"      // "http://*/*","https://*/*"             // Cross Site Access Requests
  ],
   "web_accessible_resources": ["js/LeoScript.js"]
}

J'ai également donné l'autorisation "web_accessible_resources" au script, mais toujours sans succès. Code dans le script d'arrière-plan:

chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) {
    if (changeInfo.status == 'complete') {
        if (tab.url.indexOf("in.yahoo") !== -1) {
            chrome.tabs.update(tabId, { url: "https://login.yahoo.com/config/mail?.intl=us" });
            chrome.tabs.executeScript(tabId, {
                code: "document.body.appendChild(document.createElement('script')).src='" +
    chrome.extension.getURL("js/LeoScript.js") + "';"
            }, null);

Code dans LeoScript.js, qui sera injecté dans une page spécifique.

$(document).ready(function () {
    alert('injected');
    document.getElementById('username').value='aaaaaaa';
});

Script de contenu: eventPage.js que j'utilisais pour injecter le script.

var script = document.createElement('script');
    script.src = chrome.extension.getURL("js/Leoscript.js");
    (document.body || document.head || document.documentElement).appendChild(script);

Veuillez me signaler tout changement dans le code ci-dessus qui résoudra les problèmes d'autorisation. Merci d'avance.

25
Vineel Gogineni

MISE À JOUR: Enfin résolu votre problème. Dans eventPage.js, vous avez essayé d'injecter js/Leoscript.js, qui n'est PAS sur liste blanche, au lieu de js/LeoScript.js (avec un "S" majuscule), qui est sur liste blanche. Notez que les URL sont sensibles à la casse !

chrome.tabs.executeScript(tabId, {file: 'js/LeoScript.js'});

LeoScript.js:

alert('injected');
document.getElementById('username').value='aaaaaaa';
14
方 觉

ÉDITER:

Ceci est une version de travail où la combinaison de web_accessible_resources et Injection est utilisée

manifest.json

{
"name":"Off Screen Tabs Demo",
"description":"This demonstrates Off Screen Tabs API",
"manifest_version":2,
"version":"1",
"permissions":["tabs","<all_urls>"],
"browser_action":{
    "default_icon":"screen.png",
    "default_popup":"popup.html"
},
 "web_accessible_resources": ["js/LeoScript.js"] ,
 "permissions":["tabs","<all_urls>"]
}

LeoScript.js

alert("Injected..");

popup.html

<html>
<head>
<script src="popup.js"></script>
</head>
<body>
</body>
</html>

popup.js *

document.addEventListener("DOMContentLoaded",function (){
    chrome.tabs.executeScript( {"file": "js/LeoScript.js"});
});

Faites-moi savoir si vous rencontrez toujours des problèmes pour le faire fonctionner

12
Sudarshan

Beaucoup arriveront sur cette page pour cette erreur car ils n'ont pas inclus leurs images/ressources Web dans le fichier manifest.json. Le lien vers la documentation de l'API est utile, alors partagez-le: ressource Web dans le manifeste

7
Lavixu