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


我的内容脚本如下所示:

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


当我在popup.html中的“ oList = response.dom;”处放置一个断点来调试代码时,我得到了
内容脚本中设置的正确值。但是在执行扩展时,“ 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 );
 });
});

10-06 15:44