Получить корневую папку закладок Google Chrome - PullRequest
6 голосов
/ 11 мая 2010

Я пытаюсь написать лучший менеджер закладок в расширениях Chrome. Проблема в том, что нет простых примеров (которые я могу найти) о том, как на самом деле использовать bookmarks API .

Я посмотрел пример источника (когда я установил его на свой компьютер, он ничего не делал, кроме окна поиска. Вводить / печатать и нажимать клавишу возврата ничего не получалось) и не могу найди что-нибудь полезное.

Моя конечная цель - создать расширение, которое позволит мне сохранять страницы для последующего чтения и чтения без необходимости регистрировать учетную запись в каком-либо сервисе. Поэтому я планирую создать одну или две папки закладок в корневой папке / других закладках - как минимум в папке «непрочитанные страницы». В этой папке я создам непрочитанные закладки. Когда пользователь помечает элемент как прочитанный, он будет удален из этой папки.

Так вот, что я пытаюсь сделать ... любая помощь будет принята с благодарностью, даже если она просто указывает мне на несколько хороших примеров.

UPDATE:

...<script>
function display(tree){
   document.getElementById("Output").innerHTML = tree;
}
function start(){
   chrome.bookmarks.getTree(display);
}
</script>
</head>
<body>
<h4 id="Output"></h4>
<script>
 start();
</script>
...

Это показывает [object Object], что говорит (по крайней мере, мне с ограниченным опытом JavaScript), что объект существует. Но как получить доступ к членам этого объекта?

Изменение tree на tree.id или любое другое отображение параметров, которое выглядит как undefined.

Ответы [ 3 ]

9 голосов
/ 12 мая 2010

В настоящее время нет хорошего способа найти папки, такие как «Другие закладки» или «Панель закладок» в API закладок. Вам нужно будет перебрать все закладки, найти узел с этими корневыми папками и сохранить его идентификатор закладки. Ошибка подана Выпуск 21330 .

Идентификатор корня всегда равен 0, а когда я имею в виду 0, он соответствует «Панели закладок» и «Другие закладки». Как и любая древовидная структура, у каждого узла есть дочерние элементы. Если вы хотите получить все закладки из одной папки, вы можете использовать API getChildren и рекурсивно получить каждый узел (вы можете делать это итеративно). Например, следующее будет получать каждую закладку:

printBookmarks('0');

function printBookmarks(id) {
 chrome.bookmarks.getChildren(id, function(children) {
    children.forEach(function(bookmark) { 
      console.debug(bookmark.title);
      printBookmarks(bookmark.id);
    });
 });
}

Теперь, почему мы должны вызывать API для каждой итерации? Это API для получения всего дерева. Если вы попробовали это, вы увидите, что у каждого узла в getTree будет список дочерних элементов. Это идеально:

chrome.bookmarks.getTree(function(bookmarks) {
  printBookmarks(bookmarks);
});

function printBookmarks(bookmarks) {
  bookmarks.forEach(function(bookmark) {
    console.debug(bookmark.id + ' - ' + bookmark.title + ' - ' + bookmark.url);
    if (bookmark.children)
      printBookmark(bookmark.children);
  });
}

Вот и все, вы также можете делать все это итеративно, что повышает производительность, но вы можете это понять :) Обратите внимание, что, поскольку вы хотите повторить панель закладок, вы можете переопределить эту страницу в расширениях (скоро): http://code.google.com/chrome/extensions/override.html

Если вы хотите показать красивое HTML-дерево своих закладок, вы можете легко сделать это, расширив функциональность getTree, которую я показал выше, чтобы принять родительский DOM. Вы можете сделать что-то , как это . Отредактируйте код, чтобы использовать getTree или сверните все, а также используйте getChildren и извлекайте больше закладок, если они этого потребуют.

1 голос
/ 12 мая 2010

Хорошо, я обнаружил, как получить доступ к тому, что я хочу. Оглядываясь назад, я должен был увидеть это раньше.

http://code.google.com/chrome/extensions/tut_debugging.html

Используя отладчик, я смог установить точку останова и просмотреть объекты. [объект Object] является массивом длины 1.

Используя функцию, приведенную в моем примере, tree [0] .children - это массив, содержащий дочерние элементы. У моего дерева настроек по умолчанию есть два дочерних элемента, tree [0] .children [0] - «Панель закладок», а tree [0] .children [1] - «Другие закладки». Остальная часть дерева закладок стекает оттуда, хотя папка, которую я ищу, - «Другие закладки» (tree [0] .children [1]).

1 голос
/ 11 мая 2010

Закладки организованы в виде дерева, где каждый узел в дереве либо закладка или группа (папка, которая может содержать узлы). Каждый узел в дерево представлено Объект BookmarkTreeNode.

Нет корневой папки закладок в смысле объекта файловой системы. Все закладки хранятся в структурированном файле, к которому вы обращаетесь через API по указанной вами ссылке. Корень дерева возвращается getTree:

chrome.bookmarks.getTree
...