获取Google Chrome的根书签文件夹

时间:2010-05-11 16:42:52

标签: javascript google-chrome google-chrome-extension bookmarks

我正在尝试在Chrome扩展程序中编写更好的书签管理器。问题是没有关于如何实际使用bookmarks API的简单示例(我可以找到)。

我查看了示例源代码(当我将其导入并安装到我的计算机上时,除了提供搜索框之外它没有做任何事情。键入/输入并按返回无法执行任何操作)并且不能找到有用的东西。

我的最终目标是制作一个扩展程序,允许我保存页面以便稍后阅读,而不得不在某个地方的某个服务上注册帐户。所以我计划在根文件夹/其他书签中创建一个或两个书签文件夹 - 至少是“未读页面”文件夹。在该文件夹中,我将创建未读书签。当用户将项目标记为已读时,它将从该文件夹中删除。

这就是我正在尝试做的事情......任何帮助都会受到高度赞赏,即使它只是指出了一些很好的例子。

更新:

...<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 个答案:

答案 0 :(得分:9)

目前,没有很好的方法可以在书签API中查找“其他书签”或“书签栏”等文件夹。您必须遍历所有书签并找到哪个节点具有这些根文件夹并保存其书签ID。该错误已归档Issue 21330

root id始终为0,当我的意思是0时,它对应于“Bookmarks bar”和“Other bookmarks”。作为任何树结构,每个节点都有子节点。如果要获取一个文件夹下的所有书签,可以使用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,从而轻松实现。你可以做点什么like this。编辑代码以使用getTree或折叠所有内容并使用getChildren并在请求时获取更多书签。

答案 1 :(得分:1)

  

书签在树上组织,   其中树中的每个节点都是   书签或组(文件夹)   可以包含节点)。中的每个节点   树由a代表   BookmarkTreeNode对象。

文件系统对象意义上没有根书签文件夹。所有书签都存储在结构化文件中,您可以通过您提供的链接中的API访问该文件。 getTree返回树的根:

chrome.bookmarks.getTree

答案 2 :(得分:1)

好的,我已经发现了如何访问我想要的内容。回想起来,我应该早点看到它。

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

使用调试器我能够设置断点并查看对象。 [object Object]是一个长度为1的数组。

使用我的例子中给出的函数,tree [0] .children是包含子节点的数组。在我的默认设置树上有两个子节点,树[0] .children [0]是“书签栏”,树[0] .children [1]是“其他书签”。书签树的其余部分从那里向下流动,但“其他书签”(树[0] .children [1])是我正在寻找的文件夹。