10
votes

Extension Chrome: chargez et exécutez un script externe

J'ai du mal à charger et à exécuter un script JS externe dans mon extension chromée. On dirait la même chose que Cette question , mais je ne peux toujours pas comprendre Pourquoi cela ne fonctionne pas dans mon cas.

L'idée est que je souhaite avoir dans mon script de contenu, une fonction par défaut qui devrait analyser un contenu de page Web. Et pour certaines pages Web spécifiques, je souhaite charger et utiliser des analyseurs spécifiques, j'essaie donc de charger un script JS-JS-Script pour une page WEP, et ce script devrait prolonger la fonctionnalité de l'analyseur par défaut.

J'essaie uniquement d'exécuter du code à partir d'un script externe, mais d'une telle erreur: non cochéra runtime.lasterror lors de l'exécution d'onglets.Executscript: Aucun code source ou fichier spécifié sur objet.callback Ceci est mon manifeste.json : xxx

}

Ceci est popup.html xxx

et dans popup.js i exécutez le script comme ceci: xxx

Qu'est-ce que je suis mal , ai-je oublié quelque chose? Ou devrais-je utiliser une autre approche pour résoudre le problème?


3 commentaires

Remarque (non liée à votre erreur): "http: // * /" correspond uniquement à des pages de niveau supérieur. Vous pouvez souhaiter soit "" pour une large autorisation ou "activetab" si vous n'avez besoin que d'accéder à l'onglet en cours.


Y a-t-il une raison pour laquelle vous ne pouvez pas avoir somesite.js chargé dans votre extension?


Pour attraper LasterRor, voir Stackoverflow.com/a/45603880/632951


3 Réponses :


11
votes

Les scripts d'exécution des sources externes telles que vous essayez sont interdits par Google Chrome et bloqueront ou même ne pas publier votre extension. Tous les scripts doivent être dans l'extension. Mais il y a une solution, de Google Chrome Doc :

La restriction contre les ressources chargées sur HTTP s'applique uniquement à ces ressources qui sont directement exécutées. Tu es toujours libre, pour exemple, pour fabriquer des connexions XMLHTTPReQuest à une origine que vous aimez; La stratégie par défaut ne limite pas Connect-SRC ou l'un des autres Directives CSP de quelque manière que ce soit. P> blockQuote>

Si vous avez mal à une source externe, vous pouvez effectuer une requête HTTP XML et utiliser l'EVAL dans le contenu. Voici une partie du code de Google Doc : P>

"content_security_policy":  "script-src 'self' 'unsafe-eval'; object-src 'self'"`,


1 commentaires

Ce n'est pas vrai. Voir le didacticiel officiel d'extension chromé qui chargez Google Analytics via la balise de script: développeur.chrome.com/extensions/tut_analytics < / a>



5
votes

Selon la discussion ici: https: //groups.google.com/a/chromium.org/forum/#!topic/chromium-extensions/lih7lgXeqho ,

Les scripts en cours d'exécution des sources externes peuvent faire valoir votre extension ou bloquée.

Il suffit de fournir une autre approche, vous pouvez apporter un appel AJAX au script de contenu, puis appelle chrome.tabs.execscript xxx


1 commentaires

Impossible de télécharger et d'exécuter un script être considéré comme exécuter des scripts à partir de sources externes ? Est-ce autorisé par Google?



1
votes

L'option "Fichier" pour ExestéScript concerne uniquement les fichiers forts> incorporés dans votre extension. Je sais, La documentation n'est pas claire sur cela et pendant que cela pourrait fonctionner Avec les URL, cela ressemble à un hack, pas une fonctionnalité. Afin de charger des scripts de sources externes dans votre page active, vous devez généralement exécuter un script qui crée une étiquette de script à l'intérieur de la DOM du document chargé.

Je pense que j'ai répondu des parties de cette question avant ici: Pourquoi chrome est-il .TAB.Executscript () nécessaire pour modifier le site Web actuel DOM et comment puis-je utiliser JQuery pour obtenir le même effet? P>

à résumer: p>

1) dans l'ordre Pour avoir accès aux pages Web à partir de l'extension, vous devez ajouter Autorisations pour cela: P>

chrome.tabs.executeScript(tab.id, {
    code : 'var script=document.createElement(\'script\');' +
    'script.onload=function() { /*do something in the page after the script was loaded*/ };' +
    'script.src=\'http://127.0.0.1:8000/static/plugin/somesite.js\';' +
    'document.body.appendChild(script);'
}, function (returnedValue) {
    // do something in the extension context after the code was executed
});


1 commentaires

Mais cela ne fonctionnera pas comme code de poste. Il fonctionnera comme la page JavaScript.