6

我想在Chrome擴展中編寫更好的書籤管理器。問題是沒有簡單的例子(我可以找到)如何實際使用bookmarks API。我已經看過這個例子的源代碼(當我在我的電腦上安裝它時,它除了提供搜索框外沒有做任何事情,打字/打字和按回車都沒有做任何事情),並且可以'找到有用的東西。獲取Google Chrome的根書籤文件夾

我的最終目標是做一個擴展,使我可以保存頁面,並在稍後閱讀而不需要必須註冊某個服務的某個帳戶。所以我打算在根文件夾/其他書籤中創建一個或兩個書籤文件夾 - 至少是「未讀頁面」文件夾。在該文件夾中,我將創建未讀的書籤。當用戶將該項目標記爲已讀時,它將從該文件夾中刪除。

所以這就是我想要做的......任何幫助將不勝感激,即使它只是指向我一些很好的例子。

UPDATE:

...<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

回答

9

目前,沒有好方法在書籤API中查找諸如「其他書籤」或「書籤欄」之類的文件夾。您必須遍歷所有書籤並查找哪個節點具有這些根文件夾並保存其書籤ID。該錯誤提交到Issue 21330

根id始終爲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。你可以做點什麼like this。編輯代碼以使用getTree或摺疊所有內容,並使用getChildren並在請求時獲取更多書籤。

+0

偉大的答案,謝謝穆罕默德。 – 2011-04-26 00:30:10

1

書籤以樹,其中 樹中的每個節點是 書籤或基團(a文件夾 可以包含節點)進行組織。 樹中的每個節點由一個 BookmarkTreeNode對象表示。

在文件系統對象的意義上沒有根書籤文件夾。所有書籤都存儲在結構化文件中,您可以通過您提供的鏈接通過api訪問該文件。樹的根由getTree返回:

chrome.bookmarks.getTree 
+0

雖然這可能是事實,但我嘗試過的每一種形式和時尚都無法返回正確的結果。 chrome.bookmarks.getTree實際上並不返回值。它需要一個函數,據說它是用這個函數做的,但其中存在這個問題 - 沒有一個簡單的例子說「這得到根節點,等等等等等等」。這裏有一個非常先進的例子,但據我已經能夠確定它不再有效(看到它不工作,我偶然發現了一些鏈接,談論他們如何更新API) – 2010-05-11 22:02:01

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])是我正在查找的文件夾。