为什么“chrome.bookmarks.getTree”不起作用?

时间:2012-04-22 14:27:37

标签: javascript google-chrome-extension

如果我尝试以下代码:

chrome.bookmarks.getTree(function(items) {
  items.forEach(function(item) {
    document.write(item.url);
  });
});

它返回undefined。但是当我写道:

chrome.bookmarks.getRecent(20, function(items) {
  items.forEach(function(item) {
    document.write(item.url);
  });
});

它有效。

为什么会有所不同?

2 个答案:

答案 0 :(得分:7)

chrome.bookmarks.getTreechrome.bookmarks.getRecent都返回BookmarkTreeNodes数组,但BookmarkTreeNodes不一定具有url属性。在getTree的情况下,树的顶部节点是文件夹,没有URL:

BookmarkTreeNode structure

如果使用getTree,则必须使用每个节点的children数组递归遍历树。知道每个BookmarkTreeNode 具有children属性(如果它是文件夹)或url属性(如果它是实际书签)是有帮助的。尝试类似:

chrome.bookmarks.getTree(function(itemTree){
    itemTree.forEach(function(item){
        processNode(item);
    });
});

function processNode(node) {
    // recursively process child nodes
    if(node.children) {
        node.children.forEach(function(child) { processNode(child); });
    }

    // print leaf nodes URLs to console
    if(node.url) { console.log(node.url); }
}

答案 1 :(得分:-1)

chrome.bookmarks需要使用权限。尝试在页面中使用它 chrome://bookmarks