2012-04-22 208 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