5

我想为 google chrome / chromium 编写一个扩展程序(一个会话管理器,它比画廊中已有的功能和视觉效果更多)。

但我无法让以下代码工作:

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)。我也尝试了谷歌的官方 chrome 版本,结果相同。

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

飞哥

4

1 回答 1

7

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

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

  • 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
});
于 2010-11-11T18:10:30.583 回答