Extension Chrome: sendMessage de fond pour le contenu du script ne fonctionne pas
Je sais que la question a été demandé à plusieurs reprises de différentes façons, mais j'ai essayé d'aller à travers toutes les réponses (j'espère n'avoir oublié personne) et aucun d'entre eux travaillaient pour moi.
Voici mon extension de code:
manifeste:
{
"name": "test",
"version": "1.1",
"background":
{
"scripts": ["contextMenus.js"]
},
"permissions": ["tabs", "<all_urls>", "contextMenus"],
"content_scripts" : [
{
"matches" : [ "http://*/*" ],
"js": ["jquery-1.8.3.js", "jquery-ui.js"],
"css": [ "jquery-ui.css" ],
"js": ["openDialog.js"]
}
],
"manifest_version": 2
}
contextMenus.js
function onClickHandler(info, tab) {
if (info.menuItemId == "line1"){
alert("You have selected: " + info.selectionText);
chrome.extension.sendMessage({action:'open_dialog_box'}, function(){});
alert("Req sent?");
}
}
chrome.contextMenus.onClicked.addListener(onClickHandler);
chrome.runtime.onInstalled.addListener(function() {
chrome.contextMenus.create({"id": "line1", "type": "normal", "title": "I'm line 1", "contexts":["selection"]});
});
openDialog.js
chrome.extension.onMessage.addListener(function(msg, sender, sendResponse) {
if (msg.action == 'open_dialog_box') {
alert("Message recieved!");
}
});
Les deux alertes de l'arrière-plan de la page de travail, tandis que celui de la content_script ne l'est pas.
journal de la console du message: Port d'erreur: impossible d'établir la connexion. Fin de réception n'existe pas.
Où est ma faute?
- Vous devez utiliser
chrome.tabs.sendMessage()
pour envoyer des messages à des scripts de contenu, paschrome.extension.sendMessage()
.
InformationsquelleAutor Subway | 2013-01-09
Vous devez vous connecter pour publier un commentaire.
Dans votre fond de page, vous devez appeler
au lieu d'utiliser
chrome.extension.sendMessage
que vous ne le font actuellement.La
chrome.tabs
variante envoie des messages à des scripts de contenu, alors que lachrome.extension
fonction envoie des messages à tous les autres l'extension des composants.chrome.tabs.sendMessage
doit spécifier quel onglet pour envoyer. Donc la solution est le changement de:chrome.tabs.query({active: true}, function(tabs){ chrome.tabs.sendMessage(tab.id, {action: "open_dialog_box"}, function(response) { }); });
chrome.runtime.onMessage.addListener( (message, sender, sendResponse) => { /* Code Here */ } );
message
est le paramètre contenant{ action: "open_dialog_box" }
ou ce que vous envoyez.sender
est un objet contenant votre Chrome extension de l'ID.sendResponse
est le paramètre contenantfunction(response) {}
ou quelle que soit la fonction que vous transmettez à être appelé une fois que le message est traité.content_script.js
etbackground.js
??