Chrome擴展之書籤

Chrome爲開發者提供了添加、分類(書籤文件夾)和排序等方法來操作書籤,同時也提供了讀取書籤的方法。

 

要在擴展中操作書籤,需要在Manifest中聲明bookmarks權限:

 

"permissions": [

"bookmarks"

]

在具體講解操作書籤的方法前,先讓我們來了解一下書籤對象的數據結構。書籤對象有8個屬性,分別是id、parentId、index、url、title、dateAdded、dateGroupModified和children。這8個屬性並不是每個書籤對象都具有的,比如書籤分類,即一個文件夾,它就不具有url屬性。index屬性是這個書籤在其父節點中的位置,它的值是從0開始的。children屬性值是一個包含若干書籤對象的數組。dateAdded和dateGroupModified的值是自1970年1月1日至修改時間所經過的毫秒數。只有id和title是書籤對象必有的屬性,其他的屬性都是可選的。id不需要人爲干預,它是由Chrome管理的。根的id爲'0'。

創建書籤。可以通過create方法來創建書籤:

chrome.bookmarks.create({
    parentId: ,
    index: ,
    title: ,
    url: 
}, function(bookmark){
    console.log(bookmark);
});

 

請注意上面代碼的parentId屬性,'0'爲根節點id,根節點下是不允許創建書籤和書籤分組的,

它的下面默認只有三個書籤分組:書籤欄、其他書籤和移動設備書籤,如果創建時不指定parentId,則所創建的書籤會默認加入到其他書籤中。create方法成功後會調用指定的回調函數,回調結果是書籤對象。create方法支持指定的書籤屬性只有上述代碼中所列出的4個:parentId、index、title和url,其他屬性均不支持指定。如果不指定index,這個書籤就將自動添加到相應父節點的尾部。

創建書籤分類。創建書籤分類的方法和創建書籤的方法大致相同,如果創建的書籤不包含url屬性,則Chrome自動將其視作爲書籤分類。

調整書籤位置。通過move方法可以調整書籤的位置,這種調整可以是跨越父節點的,下面的代碼將id爲m的書籤移動到了id爲n的父節點第k個位置:

chrome.bookmarks.move(m, {
    parentId:n,
    index:k
}, function(bookmark){
    console.log(bookmark);
});

更新書籤。通過update方法可以更改書籤屬性,包括標題和URL,更新時未指定的屬性值將不會更改。下面的代碼將將id爲m的書籤標題改爲'mm',URL改爲'url':

chrome.bookmarks.update(m, {
    title: 'mm',
    url: 'url'
}, function(bookmark){
    console.log(bookmark);
});

 

移除書籤。通過remove和removeTree可以刪除書籤,remove方法可以刪除書籤和空的書籤分組,removeTree可以刪除包含書籤的書籤分組。下面的代碼移除了id爲m的書籤和id爲n的書籤分組。請注意,下面的代碼實際上並不能看出刪除的是書籤還是分組,這要結合用戶的實際情況。

chrome.bookmarks.remove(m, function(){
    console.log('Bookmark m has been removed.');
});
chrome.bookmarks.removeTree(n, function(){
    console.log('Bookmark group n has been removed.');
});

 

下面我們來了解一下如何獲取用戶的書籤內容。通過getTree方法可以獲得用戶完整的書籤樹,但請注意,如果用戶的書籤樹結構過於複雜或內容過多,getTree方法的效率會很低,而且也會消耗較多的資源,所以請考慮使用後面的方法按需獲取部分書籤樹。下面的代碼獲取了用戶的整個書籤樹:

chrome.bookmarks.getTree(function(bookmarkArray){
    console.log(bookmarkArray);
});

 

需要指出,上面的代碼的返回結果依然是一個數組,雖然這個數組永遠都只包含一個元素,書籤樹的根節點。

getChildren方法可以返回以指定節點爲父節點的下一級書籤節點,但不包括再下一級的節點,也就是說返回的書籤對象不包括children屬性,無論它是否具有子節點。通過這個方法我們可以一層一層地按需獲取用戶的書籤結構。下面的方法獲取了根節點的所有子節點。

chrome.bookmarks.getChildren('0', function(bookmarkArray){
    console.log(bookmarkArray);
});

 

getSubTree方法可以返回自指定節點開始包括當前節點及向下的所有節點,這個方法與getChildren的區別是返回值會包含父節點,且沒有層級限制,即包含書籤對象的children屬性。下面的代碼返回的結果與getTree方法返回的結果相同:

chrome.bookmarks.getSubTree('0', function(bookmarkArray){
    console.log(bookmarkArray);
});

 

get方法可以返回指定節點不包含children屬性的書籤對象數組,指定的節點可以是一個或多個。比如下面的代碼獲取了id爲m和n的書籤對象:

chrome.bookmarks.get([m, n], function(bookmarkArray){
    console.log(bookmarkArray);
});

getRecent方法提供了獲取最近添加的多個書籤,下面的代碼獲取了最近添加的5個書籤:

chrome.bookmarks.getRecent(5, function(bookmarkArray){
    console.log(bookmarkArray);
});

 

1.根節點的id爲0

 

2.默認只有三個書籤分組:書籤欄、其他書籤

 

 

3.我們收藏的內容都在書籤欄下

4.開始遍歷根節點下的子節點
case Gome.Constant.ACTION.COLLECT_ALL_BOOKMARK:
    chrome.bookmarks.getChildren('0', function (bookmarkresult) {
        console.log("zy_child_bookmark:" + JSON.stringify(bookmarkresult));
    });
    break;

 

 

5.判斷json數據是否是json數組的方法

var isArray = Array.isArray(data);
console.log("zy_isArray:" + isArray);

6.分析書籤遍歷方式

case Gome.Constant.ACTION.COLLECT_ALL_BOOKMARK:

//該方法返回整棵標籤結構樹,是一個json數組,現在需要的就是解析json數組

chrome.bookmarks.getTree(function (bookmarkresult) {

handler.onCollectAllBookmark(bookmarkresult);

});

break;

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章