сообщение расширения chrome не проходит без ответа

Я работаю над довольно простым расширением для браузера, но не могу заставить передачу сообщений работать: я могу отправлять сообщения, но ответ никогда не доставляется!

Мой код: в основном это просто копия из учебника по браузерным действиям, учебника по контентным сценариям (манифеста) и определения API для передачи сообщений.

манифест.json:

{
    "manifest_version":2,
  "name": "FUN SCRIPT",
  "version": "1",
  "description": "THIS IS SOME FUN SCRIPT",
  "browser_action": {
    "name": "Fun",
    "icons": ["icon.png"],
    "default_icon": "icon.png",
     "default_popup": "popup.html"
  },
  "content_scripts": [ {
    "js": [ "jquery.js", "background.js" ],
    "matches": [ "http://*/*", "https://*/*"]
  }],
}

фон.js

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

всплывающее окно.js

document.addEventListener('DOMContentLoaded', function () {
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
      chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello"}, function(response) {
        console.log(response.farewell);
      });
    });
});

всплывающее окно.html

<!doctype html>
<html>
  <head>
    <title>Getting Started Extension's Popup</title>
    <style>
      body {
        min-width: 357px;
        overflow-x: hidden;
      }

      img {
        margin: 5px;
        border: 2px solid black;
        vertical-align: middle;
        width: 75px;
        height: 75px;
      }
    </style>
    <script src="popup.js"></script>
  </head>
  <body>
  </body>
</html>

person Nils Ziehn    schedule 14.10.2013    source источник


Ответы (1)


Поскольку сообщение из вашего всплывающего окна в сценарий содержимого отправляется всякий раз, когда загружается всплывающее окно, обязательно перезагрузите страницу, чтобы убедиться, что сценарий содержимого загружен. В противном случае вы можете получить следующую ошибку:

Could not establish connection. Receiving end does not exist.

Тем не менее, я попробовал то, что вы предоставили, и это сработало как есть. Поскольку ваш вывод находится в popup.js, ответ находится в консольном выводе всплывающего окна. Вы можете просмотреть его, щелкнув правой кнопкой мыши значок действия браузера и выбрав «Проверить всплывающее окно».

person Métoule    schedule 14.10.2013
comment
Я не думаю, что это правда, поскольку сообщение доставляется в сценарий содержимого (и я получаю console.log из сценария содержимого), но ответ не работает. Также: действие запускается, когда я нажимаю кнопку browserAction. Это после загрузки сценария содержимого! - person Nils Ziehn; 14.10.2013
comment
Хорошо, я попробовал дальше, и это работает с тем, что вы предоставили. Я загрузил расширение, просмотрел всплывающее окно и увидел ошибку Receiving end does not exist. Я перезагрузил страницу, чтобы загрузить сценарий содержимого, затем повторно проверил всплывающее окно и увидел ожидаемый вывод консоли. - person Métoule; 14.10.2013
comment
Очень интересно.. Я думал, что это тоже должно работать. Но я не вижу вывод консоли из ответа. - person Nils Ziehn; 14.10.2013
comment
Может ты не там ищешь? Поскольку ваш вывод находится в popup.js, ответ находится в консольном выводе всплывающего окна. Вы можете просмотреть его, щелкнув правой кнопкой мыши значок действия браузера и выбрав «Проверить всплывающее окно». - person Métoule; 14.10.2013
comment
Эй, в этом и была проблема - Вы хотите написать это как ответ, чтобы я мог проголосовать за него? - person Nils Ziehn; 15.10.2013
comment
Я отредактировал свой ответ с учетом предоставленных вами отзывов, чтобы убедиться, что он действительно соответствует вашей проблеме. - person Métoule; 15.10.2013