Chrome扩展程序中的可变范围问题

时间:2013-12-22 16:13:57

标签: javascript google-chrome google-chrome-extension scope

我正在撰写Chrome扩展程序。我有以下代码。

function getCurrentTab() {
  var r;
  chrome.tabs.query({
    active:true,
    currentWindow:true
  },function (tabs) {
    r=tabs[0];
    console.log(r);
  });
  return r;
}

console.log(getCurrentTab());

我希望此函数返回活动标签。不幸的是,回调函数中的归因不会影响父函数getCurrentTab中的r,我无法弄清楚为什么会这样。

此代码写入控制台:

undefined
Object {active: true, height: 954, highlighted: true, id: 16, incognito: false…}

期望的结果将是:

Object {active: true, height: 954, highlighted: true, id: 16, incognito: false…}
Object {active: true, height: 954, highlighted: true, id: 16, incognito: false…}

1 个答案:

答案 0 :(得分:0)

由于查询函数的回调是异步的,你需要为getCurrentTab函数提供一个回调函数并在那里进行操作:

function getCurrentTab(callback) {
    chrome.tabs.query({
        active:true,
        currentWindow:true
    }, function (tabs) {
        callback(tabs[0]);
    });
}

getCurrentTab(function(r){
    console.log(r);
    // ... other operations using current tab ...
});