在chrome api调用之外携带变量

时间:2012-11-27 04:08:09

标签: javascript google-chrome-extension

  

可能重复:
  After calling chrome.tabs.query, the results are not available

免责声明:我是一个完整的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移动到它运行的函数中,但关键是我想要foo引用我稍后可以在我的popup.js中使用的变量

1 个答案:

答案 0 :(得分: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是一个异步调用,这就是为什么它有一个回调。如果它是同步的,请忽略我的答案。