Разработка расширений Chrome: проблема с передачей сообщений - PullRequest
1 голос
/ 13 августа 2010

Возникли проблемы при передаче сообщений с использованием скриптов содержимого в расширении Google Chrome 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 );
}

и мой контент Script выглядит так:

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, кажется, выполняется сначала, прежде чем он идет на сервер .. И, следовательно, его значение не устанавливается .. Может кто-нибудь сказать мне, если я где-то не так?

1 Ответ

5 голосов
/ 13 августа 2010

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

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