Разработка расширения для Chrome :Проблема с передачей сообщений

StackOverflow https://stackoverflow.com/questions/3472881

Вопрос

Возникла проблема при передаче сообщений с использованием скриптов содержимого в Google Chrome extension dev Структура моего кода выглядит следующим образом:

popup.html:

var oList;
function getHTML()
{
    chrome.tabs.getSelected(null, function(tab) {
     chrome.tabs.sendRequest(tab.id, {action:"getHTML"}, function handler(response) {
      oList = response.dom;
     });
   });

   alert("oList = "+oList );
}

и мой контент-скрипт выглядит примерно так:

chrome.extension.onRequest.addListener(
  function(request, sender, sendResponse) {
  if(request.action == "getHTML"){
   sendResponse({dom: document.getElementsByTagName("HTML").length});   
     }
  });

Когда я отлаживаю свой код, ставя точку останова в "oList = response.dom;" в моем popup.html я получаю правильное значение, установленное в скрипте содержимого.Но при выполнении расширения "alert("oList = "+oList );" код из popup.html, похоже, выполняется первым перед отправкой на сервер..И, следовательно, его значение не устанавливается..Кто - нибудь может сказать мне , не ошибаюсь ли я где - нибудь ?

Это было полезно?

Решение

Большинство методов Chrome API являются асинхронными.Это означает, что когда вы вызываете их, скрипт не ждет их ответа и просто продолжает выполнение.Если вы хотите выполнить что-то в ответ, вы должны поместить это внутри функции обратного вызова:

chrome.tabs.getSelected(null, function(tab) {
 chrome.tabs.sendRequest(tab.id, {action:"getHTML"}, function handler(response) {
  oList = response.dom;
  alert("oList = "+oList );
 });
});
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top