Получить корневую папку закладок 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]) - это папка, которую я ищу.