Appel de fonction d'arrière-plan de l'extension Chrome à partir d'un site
Je suis à la recherche d'une fonction à l'intérieur d'une page web te activer une extension chrome.
Imaginer que http://www.example.com/test.html contient:
<script>
hello();
</script>
Et mon fond de page contient la définition de la hello
fonction:
function hello() {
alert("test");
}
Comment puis-je m'assurer que l'extension Chrome de l'arrière-plan de la page hello
est appelée lorsque test.html
appels hello();
?
Non, vous ne pouvez pas pour des raisons évidentes de sécurité. L'extension devrait exposer son API sur le but
OriginalL'auteur Wouter van Reeven | 2012-12-08
Vous devez vous connecter pour publier un commentaire.
Avant qu'une page web est en mesure d'appeler une page d'arrière-plan de la fonction, les problèmes suivants doivent être résolus:
hello();
partir d'une page web. Ceci est fait par l'injection de un script définissanthello
à l'aide de scripts de Contenu. L'injection de la fonction communique avec le contenu du script à l'aide d'un événement personnalisé oupostMessage
.chrome.moment de l'exécution.sendMessage
.Si la page web doit recevoir une réponse ainsi:
sendMessage
/onMessage
, voir ci-dessous).postMessage
pour envoyer un message à la page web.Toutes ces méthodes sont asynchrones, et doivent être mises en œuvre par le biais de fonctions de rappel.
Ces mesures doivent être conçues avec soin. Voici une implémentation générique qui met en œuvre toutes les étapes ci-dessus. Ce que vous devez savoir à propos de la mise en œuvre:
sendMessage
méthode chaque fois que le contenu de script doivent être contactés.Utilisation:
sendMessage(<mixed message> [, <function callback>])
contentscript.js
background.js
Une extension Chrome n'est pas complète sans un fichier de manifeste, voici donc la
manifest.json
fichier que j'ai utilisé pour tester la réponse:Cette extension a été testé à http://jsfiddle.net/jRaPj/show/ (contenant
hello();
comme on le voit dans la question), et affiche une boîte de dialogue disant "Background dit: null".Ouvrez la page d'arrière-plan, l'utilisation
localStorage.setItem('whatever', 'Hello!');
de voir que le message est correctement modifié.chrome.runtime.sendMessage
. Vous êtes peut-être confondu avecchrome.extension.sendRequest
?Je ne suis pas confus; mais la fonction est à la retraite complètement (pas mentionné dans les docs), et pourtant ne cesse d'apparaître dans le nouveau code de raison de s'attarder ancien exemple de code. Voir question pour le marquer comme obsolète.
OriginalL'auteur Rob W
Il y a un builtin solution à Envoyer des messages à partir de pages web à l'extension
mainfest.json
Page Web:
Extension de fond du script:
OriginalL'auteur ahmed
Pas, avec votre code ci-dessus en raison de page d'arrière-plan(s) d'architecture
Oui avec le contenu des scripts
Démonstration À L'Aide De Scripts De Contenu
manifeste.json
L'enregistrement des scripts de contenu myscripts.js
Laissez-moi savoir si vous avez besoin de plus d'informations.
Non, vous ne pouvez pas mettre ce code directement dans
myscript.js
, mais vous pouvez atteindre cet objectif en faisant appel indirect au code de la placer dansbackground
page et par le biais de messages de communication. reportez-vous à THIS laissez-moi savoir si vous avez besoin de plus d'informationsJ'ai donc besoin d'appeler la fonction javascript dans le contexte js script. Dans le code html de la page example.com/test.html dans le à faire quelque chose pour appeler le script à l'intérieur de l'extension chrome. Arrière-plan html <html> <head> </head> <body> <script> function bonjour() { alert("test"); } </script> </body> </html> myscript.js bonjour();
Oui, mettre le code pour
browsing data API
dansbackground js
, et appeler la fonction à partir du contenu du script à l'aide de messages de communication; reportez-vous à THIS pour en savoir plusVous ne pouvez pas le faire directement un appel avec hello(); elle doit être invoquée par le biais de messages de communication .
OriginalL'auteur Sudarshan