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

标签 javascript google-chrome google-chrome-extension chromium

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

但是我无法让下面的代码工作:

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

飞哥

最佳答案

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

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

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

关于javascript - chrome.windows.getAll() 未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4157271/

相关文章:

javascript - 无法运行 Meteor 应用程序

javascript - Facebook Messenger 插件无法关闭

javascript - json 劫持与 IE>10 或 chrome >30 相关吗?

javascript - 仅使用 Chrome 打印选择来打印所选选项

javascript - Chrome 扩展 onCreatedNavigationTarget Listener 停止工作

html - 并排(水平)图像链接的 Chrome 浏览器扩展对齐方式

javascript - 刷新 chrome 扩展的图标更改

javascript - Node.js - 服务器关闭了连接?

windows - 无法使用 www.google.com NET::ERR_CERT_COMMON_NAME_INVALID SSL 证书无效

javascript - 从 NPAPI 插件调用 javascript 函数