chrome.windows.getAll () не определено? - PullRequest
4 голосов
/ 11 ноября 2010

Я хочу написать расширение (менеджер сессий, который имеет больше функций и приятных глаз, чем те, что уже есть в галерее) для 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;
}

Это довольно простой пример использования API Google, но вместо списка вкладок в ответ я получаю только «неопределенные» значения.Кроме того, список окон кажется пустым.

В настоящее время я использую Chromium 7.0.517.44 (64615) под Ubuntu 10.10.Я также попробовал официальный выпуск Chrome от Google с теми же результатами.

Документацию по API можно найти здесь: http://code.google.com/chrome/extensions/windows.html

phineas

1 Ответ

4 голосов
/ 11 ноября 2010

Предполагая, что вы объявили tabs разрешение в манифесте, есть несколько проблем с этим кодом:

  • list_session() вернет пустой список, поскольку вы изменяете список в функции обратного вызова, которая может быть вызвана Chrome через 15 минут после ваших 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
});
...