web-dev-qa-db-fra.com

Chrome extension: sendMessage du script au contenu ne fonctionne pas

Je sais que cette question a été posée à plusieurs reprises de différentes manières, mais j'ai essayé de passer en revue toutes les réponses (espérons que personne ne m'a manqué) et aucune d'entre elles n'a fonctionné pour moi.

Voici le code de mon extension:

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 la page d'arrière-plan fonctionnent, alors que celle de content_script ne fonctionne pas.

message du journal de la console: Erreur de port: Impossible d'établir la connexion. La fin de réception n'existe pas.

Où est ma faute?

69
Subway

Dans votre page de fond, vous devriez appeler

chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
    chrome.tabs.sendMessage(tabs[0].id, {action: "open_dialog_box"}, function(response) {});  
});

à la place d'utiliser chrome.extension.sendMessage comme vous le faites actuellement.

Le chrome.tabs variante envoie des messages aux scripts de contenu, alors que la chrome.extension _ fonction envoie des messages à tous les autres composants de l’extension.

120
apsillers