我想为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下的铬7.0.517.44(64615)。我也尝试了Google的官方Chrome版本,并获得了相同的结果。

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

Phineas

有帮助吗?

解决方案

假设您宣布 tabs 清单中的权限,此代码有几个问题:

  • list_session() 函数将返回空列表,因为您可以在回调函数中修改列表,该列表可以由Chrome调用15分钟后的Chrome console.log(list);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
});
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top