Получить корневую папку закладок Google Chrome

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

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

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

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

обновление:

...<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 to tree.id или любой другой из того, что выглядит как параметры отображает undefined.

3 ответов


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

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

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 и получить больше закладок, если они запрашивают его.


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

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

chrome.bookmarks.getTree

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

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

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

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