Расширение Google Chrome - невозможно передать сообщение из скрипта контента на всплывающую страницу в том же расширении - PullRequest
1 голос
/ 07 ноября 2011

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

function sendjsontrue()
{

        var arrCars = new Array("Toyota", "Mercedes", "BMW");           
            jsonStr = JSON.stringify(arrCars);
        chrome.extension.sendRequest({greeting: jsonStr},     function(response){
            console.log(response.farewell);
            });
        console.log("Message with header=greeting has been sent...");
}

Код в моем popup.html для обработки сообщения, отправленного скриптом содержимого, приведен ниже -

<script>
chrome.extension.onRequest.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"});
  else
      sendResponse({notfarewell:"Not goodbye"}); .
  });

</script>

Ошибка, которую я получаю, приведена ниже -

Port error: Could not establish connection. Receiving end does not exist.
chrome/EventBindings:184Error in event handler for 'undefined': TypeError: Cannot read     property 'farewell' of undefined
at chrome-extension://nkmkgjckmjekpbghhildcfdlnbjeglkd/obtainformdata.js:81:25
at chrome/RendererExtensionBindings:238:13
at [object Object].dispatch (chrome/EventBindings:182:28)
at Object.<anonymous> (chrome/RendererExtensionBindings:134:27)

Что я здесь не так сделал?

Ответы [ 2 ]

3 голосов
/ 23 мая 2012

У меня возникла та же проблема, когда я слушал запрос от option.html. Я нашел следующее решение:

Вы также можете написать код получателя на всплывающей странице, ноограничение заключается в том, что ваш запрос прослушивается chrome.extension.onRequest.addListener () только при активном popup.html.Поэтому, если вы хотите слушать запрос все время, вы должны написать

chrome.extension.onRequest.addListener()

на фоновой странице и зарегистрировать эту страницу в manifest.json.

3 голосов
/ 07 ноября 2011

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

Если вам нужна достойная документация, взгляните на:

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