1

Google chrome 拡張機能 dev My Code 構造でコンテンツ スクリプトを使用してメッセージを渡す際に問題が発生すると、次のようになります。

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 の " " コードは、サーバーに送信される前に最初に実行されているようです。したがって、その値は設定されていません。

4

1 に答える 1

5

ほとんどの Chrome API メソッドは非同期です。これは、それらを呼び出しているときに、スクリプトが応答を待たずに実行を継続することを意味します。応答時に何かを実行したい場合は、コールバック関数内に配置する必要があります。

chrome.tabs.getSelected(null, function(tab) {
 chrome.tabs.sendRequest(tab.id, {action:"getHTML"}, function handler(response) {
  oList = response.dom;
  alert("oList = "+oList );
 });
});
于 2010-08-13T00:22:25.253 に答える