chrome.runtime.sendMessage ne fonctionne pas comme prévu
Je suis en train d'écrire un plugin Chrome avec un contenu de script et un arrière-plan de script, et je suis en train de faire les deux à communiquer.
Dans le contenu de mon script, je suis en train de faire
chrome.runtime.sendMessage({greeting: "hello"}, function(response) {
console.log(response.farewell);
});
et mon fond de script, je suis en train de faire
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
console.log(sender.tab ?
"from a content script:" + sender.tab.url :
"from the extension");
if (request.greeting == "hello")
sendResponse({farewell: "goodbye"});
}
);
Mon manifeste ressemble à ceci:
{
"manifest_version": 2,
"name": "Tesing Phase",
"version": "1.0",
"background": {
"persistent": false,
"scripts": ["bgscript.js"]
},
"content_scripts": [{
"js": ["contentscript.js"],
"all_frames": true,
"run_at" : "document_start",
"matches": ["*://*/*"]
}],
"web_accessible_resources": ["script.js"]
}
Quand je lance mon plugin, j'obtiens l'erreur suivante:
Uncaught TypeError: Object #<Object> has no method 'sendMessage'
J'ai essayé de journalisation chrome.runtime
et il n'y a pas de méthode sendMessage
. Je suis l'aide de la version 25.0 de Chromium sur Ubuntu. J'ai essayé d'utiliser sendRequest
ainsi, mais il a dit qu'il est amorti et sendMessage
doit être utilisé.
Quelqu'un peut-il m'indiquer ce que je suis en manque ici? Sont là toutes les autorisations nécessaires pour que cela fonctionne?
source d'informationauteur Jiby Jose
Vous devez vous connecter pour publier un commentaire.
chrome.moment de l'exécution.sendMessage
/onMessage
(et d'autres événements liés à la/des méthodes telles quese connecter
) ont été introduits dans Chrome 26.Si vous voulez écrire une extension compatible avec Chrome 20 - 25, l'utilisation
chrome.extension.sendMessage
.Un moyen de parvenir à une compatibilité optimale est de définir les
chrome.runtime
des méthodes vous-même. Par exemple, exécutez le code suivant avant le reste de votre code (le fond ou le contenu du script):Alors vous pouvez simplement utiliser la dernière API format:
Si vous vous sentez mal à l'aise avec les méthodes de modification sur le
chrome.runtime
objet, vous pouvez utiliser l'approche suivante au lieu: