chrome.windows.getAll()未定义?

时间:2010-11-11 17:26:10

标签: 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.tabs);
   }
  }
 );
 console.log(list);
 return list;
}

这是使用google api的一个相当简单的例子,但是我只获得了“未定义”值作为回报,而不是标签列表。此外,窗口列表似乎是空的。

我目前正在Ubuntu 10.10下运行Chromium 7.0.517.44(64615)。我已经尝试了google的官方chrome版本以及相同的结果。

可以在此处找到API文档: http://code.google.com/chrome/extensions/windows.html

菲尼亚斯

1 个答案:

答案 0 :(得分:4)

假设您在清单中声明了tabs权限,则此代码存在一些问题:

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

  • concat方法不会修改原始数组

  • 建议不要使用
  • in运算符来循环遍历数组,因为它可能不会返回您期望的结果。

所以我会这样写:

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
});