0

重複の可能性:
chrome.tabs.query を呼び出した後、結果が利用できない

免責事項: 私は完全な JavaScript n00b です。優しくしてください。

popup.js:

var foo = '';
chrome.tabs.query({'active': true, 'windowId': chrome.windows.WINDOW_ID_CURRENT},
   function(tabs){
      foo = tabs[0].url;
   }
);

document.getElementById("bar").innerHTML=foo;

foo が定義されていないため、これは機能しません。document.getElementById を機能する関数に移動することでわかっていますが、要点は、後で popup.js で使用できる変数を foo に参照させたいということです。

4

1 に答える 1

1

Chrome api を使用したことはありませんが、問題は基本的な JavaScript のようです。

コールバックで #bar の innerHTML を設定する必要があります。

chrome.tabs.query({'active': true, 'windowId': chrome.windows.WINDOW_ID_CURRENT},
   function(tabs){
      document.getElementById("bar").innerHTML = tabs[0].url;
   }
);

そうでない場合、提供したサンプルコードで何が起こるかを次に示します。

// 1. Create foo.
var foo = '';

// 2. Call the query function on chrome.tabs
chrome.tabs.query({'active': true, 'windowId': chrome.windows.WINDOW_ID_CURRENT},
   function(tabs){
      // 4. Set foo after query is done doing whatever.
      foo = tabs[0].url;
   }
);

// 3. Set the html of the element with id="bar" to what's in foo (which is empty right now)
document.getElementById("bar").innerHTML=foo;

編集: chrome.tabs.query は非同期呼び出しであると推測しているため、コールバックがあります。同期の場合は、私の答えを無視してください。

于 2012-11-27T04:32:35.473 に答える