Отправить данные со страницы в расширение Chrome - PullRequest
0 голосов
/ 07 марта 2019

Я пытаюсь отправить некоторые данные из моего веб-приложения в расширение Chrome (как это описано в документации Google ), но у меня появляется ошибка: Unchecked runtime.lastError: Could not establish connection. Receiving end does not exist.

Мой контент-скрипт:

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);
  });

И это мой манифест:

{
  "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
  }
}

И тестовая страница, на которую я пытаюсь отправить данные:

<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>

Ответы [ 2 ]

1 голос
/ 07 марта 2019

Проблема была в the externally_connectable конфигурации.Это не работает с localhost.Для работы с ним на localhost я добавил в свой файл хоста следующие строки:

127.0.0.1 my.localhost

Затем изменил манифест на:

 "externally_connectable": {
    "ids": ["*"],
    "matches": [
      "http://my.localhost/*",
    ]
0 голосов
/ 07 марта 2019

Это предоставит API обмена сообщениями любой странице, которая соответствует указанным вами шаблонам URL.Шаблон URL должен содержать как минимум домен второго уровня, то есть шаблоны имени хоста, такие как "", " .com", " .co.uk" и " .appspot"..com "запрещено.На веб-странице используйте API-интерфейсы runtime.sendMessage или runtime.connect, чтобы отправить сообщение определенному приложению или расширению

ref: https://developer.chrome.com/extensions/messaging#external-webpage

Возможно, это из-за вашейhttp://localhost/*

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...