le chrome.moment de l'exécution.sendMessage dans le contenu du script de ne pas envoyer de message
J'ai les fichiers suivants (gist pour un accès facile):
manifeste.json
{
"name": "testmessage",
"version": "0.1",
"manifest_version": 2,
"externally_connectable": {
"matches": ["*://www.google.com/*"]
},
"background": {
"scripts": ["background.js"],
"persistent": true
},
"content_scripts": [
{
"matches": ["*://www.google.com/*"],
"js": ["content.js"]
}
]
}
content.js
chrome.runtime.sendMessage(
"eldkfaboijfanbdjdkohlfpoffdiehnb", //PUT YOUR EXTENSION ID HERE
"foo",
function (response) {
console.log(response);
}
);
console.log("this is content.js reporting for duty");
background.js
chrome.runtime.onMessageExternal.addListener(
function(request, sender, sendResponse) {
console.log("background.js got a message")
console.log(request);
console.log(sender);
sendResponse("bar");
}
);
console.log("this is background.js reporting for duty");
Je peux voir les deux "... déclaration en douane" des messages dans les différentes consoles. Mais background.js
ne pas recevoir un message lorsque http://www.google.com charges. La ligne 5 dans content.js
imprime undefined
dans la console pour google.com.
Quand je lance chrome.runtime.sendMessage("eldkfaboijfanbdjdkohlfpoffdiehnb", "foo");
dans le google.com la console elle apparaît dans la background.js console.
Ce que je fais mal?
Vous devez vous connecter pour publier un commentaire.
Ce que vous faites mal est de plus en plus compliquer il. À deux reprises.
Tout d'abord, vous n'avez pas besoin de déclarer à l'externe connectable, puisque vous êtes l'envoi d'un message à partir d'un contenu de script et non pas la page web elle-même.
Deuxième, ce n'est pas un message externe soit. Les messages externes sont pour la connexion de différentes extensions, pas de messages au sein d'une extension.
Votre code devrait ressembler à ceci:
content.js
background.js