1

Chrome 拡張機能の popup.js に次のコードがあります。

var tt;
chrome.tabs.query({ active: true, currentWindow: true, windowType: 'normal' },
  function (tabs) {
      tt = 5;      
});
 document.getElementById('elm').textContent = tt;  

しかし、奇妙なことに、関数の外側にアクセスするとttの値は定義されませんが、関数の document.getElementById('elm').textContent = tt; 内側に置くと「5」が表示されます。では、コントロールが関数を終了するときに変数値が保持されないのはなぜですか?

ここで何が間違っていますか?

このコードは、ポップアップが表示されたときに実行されます。つまり、ブラウザー アクションのボタンがクリックされたときに、コードを読みやすいように簡略化しました。実際、現在のタブの ID を変数に取得しようとしています。しかし、何も機能しません。

4

1 に答える 1

1

答えが見つかりました。誰かが再びこれに遭遇した場合、これが起こったことです。

これchrome.tabs.queryは非同期操作であるため、コールバック関数は少し後で呼び出されました。しかし、 document.getElementById('elm').textContent = tt; コールバックが呼び出される前に行が実行されたため、問題が発生しました。デバッグ時には、コードをステップ実行するとその行の実行が遅延するため、これは発生しませんでした。

于 2012-07-21T15:06:35.937 に答える