网站搜索

javascript - chrome.windows.getAll() 是未定义的吗?


我想为谷歌浏览器/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

菲尼亚斯

答案#1

假设你在清单文件中声明了 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
});