2012-04-22 128 views
4

如果我尝试下面的代码:为什么不“chrome.bookmarks.getTree”工作?

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

返回undifined。但是当我写:

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

它的工作原理。

它为什么不同?

回答

7

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

BookmarkTreeNode structure

如果使用getTree,你就必须递归遍历使用每个节点的children阵列树。它有助于了解每个书签树节点或者都具有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); } 
} 
+0

我想他是问为什么chrome.bookmarks不可访问,并返回undefined,我也很好奇:http://i.imgur.com/b0dqJL9.png – monstro 2015-03-03 02:21:44

+0

@monstro考虑到OP说第二个例子在问题确实起作用的时候,你似乎有一个不同的问题。欢迎您为您的单独问题发布一个新问题。 – apsillers 2015-03-03 02:46:49

+0

你见过我的prev评论的截图吗? Chrome控制台 - chrome.bookmarks未定义 - 为什么?这使得以前的示例文章无用,因为chrome.bookmarks是未定义的。 – monstro 2015-03-04 14:57:51

-1

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

+0

1)不相关,因为问题说'chrome.bookmarks.getRecent'工作; 2)在该页面中使用_什么? Chrome扩展程序无法访问“chrome://”网页。 – Xan 2015-07-16 09:15:40