J'essaie d'envoyer des données de mon application Web à mon extension Chrome (comme décrit dans google documentation), mais j'ai une erreur : Unchecked runtime.lastError: Could not establish connection. Receiving end does not exist.

Mon script de contenu :

chrome.runtime.onMessageExternal.addListener(
  function(request, sender, sendResponse) {
    if (sender.url == blocklistedWebsite)
      return;  // don't allow this web page access
    if (request.openUrlInEditor)
      openUrl(request.openUrlInEditor);
  });

Et c'est mon manifeste :

{
  "name": "test-extension",
  "version": "0.0.1",
  "manifest_version": 2,
  "background": {
    "scripts": ["src/bg/background.js"],
    "persistent": false
  },
  "content_scripts": [
    {
      "matches": ["http://localhost/*"],
      "js": ["src/inject/inject.js"]
    }
  ],
  "externally_connectable": {
    "ids": ["abcdefghijklmnoabcdefhijklmnoabc"],
    "matches": ["http://localhost/*"],
    "accepts_tls_channel_id": false
  }
}

Et la page de test, où j'essaie d'envoyer des données :

<body>
    <button onclick="processData()">Send data to extension</button>
  </body>
  <script>
    function processData() {
      /* ... */
      // The ID of the extension we want to talk to.
      var editorExtensionId = "abcdefghijklmnoabcdefhijklmnoabc";

      // Make a simple request:
      chrome.runtime.sendMessage(
        editorExtensionId,
        { openUrlInEditor: 'https://google.com' },
        function(response) {
          if (!response.success) handleError(url);
        }
      );
    }
  </script>
1
Pavel Grekovich 7 mars 2019 à 01:18

2 réponses

Meilleure réponse

Le problème était dans la configuration the externally_connectable. Cela ne fonctionne pas avec localhost. Pour travailler avec sur le localhost, j'ai ajouté dans mon fichier hôte ces lignes :

127.0.0.1 my.localhost

Puis changement de manifeste en :

 "externally_connectable": {
    "ids": ["*"],
    "matches": [
      "http://my.localhost/*",
    ]
2
Pavel Grekovich 7 mars 2019 à 16:06

Cela exposera l'API de messagerie à toute page qui correspond aux modèles d'URL que vous spécifiez. Le modèle d'URL doit contenir au moins un domaine de deuxième niveau, c'est-à-dire des modèles de nom d'hôte tels que "", ".com", ".co.uk" et " .appspot.com" sont interdits. À partir de la page Web, utilisez les API runtime.sendMessage ou runtime.connect pour envoyer un message à une application ou une extension spécifique

Réf : https://developer.chrome.com/extensions/messaging#external-webpage< /a>

C'est peut-être à cause de votre http://localhost/*

0
balduran 7 mars 2019 à 04:13