Javascript chrome.windows.getAll()未定义?

Javascript chrome.windows.getAll()未定义?,javascript,google-chrome,google-chrome-extension,chromium,Javascript,Google Chrome,Google Chrome Extension,Chromium,我想为google chrome/chrome编写一个扩展(一个会话管理器,它比图库中已有的功能和吸引眼球的功能更多) 但我无法使以下代码正常工作: function list_session() { var list = []; chrome.windows.getAll( {"populate" : true}, function (window_list) { for(window in window_list) { list.concat(window.tab

我想为google chrome/chrome编写一个扩展(一个会话管理器,它比图库中已有的功能和吸引眼球的功能更多)

但我无法使以下代码正常工作:

function list_session() {
 var list = [];
 chrome.windows.getAll(
  {"populate" : true},

  function (window_list) {
   for(window in window_list) {
    list.concat(window.tabs);
   }
  }
 );
 console.log(list);
 return list;
}
这是一个使用GoogleAPI的相当简单的例子,但是我得到的不是一个标签列表,而是“未定义”的值。此外,窗口列表似乎是空的

我目前正在Ubuntu 10.10下运行Chromium7.0.517.44(64615)。我也尝试过谷歌官方发布的chrome浏览器,结果也一样

API文档可在此处找到:


phineas

假设您在清单中声明了
选项卡
权限,则此代码存在几个问题:

  • list\u session()
    函数将返回空列表,因为您在回调函数中修改了列表,chrome可以在您的
    console.log(list)15分钟后调用该函数
    返回
    。您需要更改程序结构以改用回调

  • concat
    方法不修改原始数组

  • 不建议使用中的
    运算符在数组中循环,因为它可能返回的不是您期望的结果
所以我会这样写:

function list_session(callback) {

    chrome.windows.getAll({populate : true}, function (window_list) {
        var list = [];
        for(var i=0;i<window_list.length;i++) {
            list = list.concat(window_list[i].tabs);
        }
        console.log(list);
        if(callback) {
            callback(list);
        }
    });
}

//usage
list_session(function(tab_list) {
    //use array of tabs
});
函数列表\u会话(回调){
chrome.windows.getAll({populate:true},函数(窗口列表){
var列表=[];
对于(var i=0;i