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;?
?
總結
以上是生活随笔為你收集整理的Chrome扩展之书签的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CAD填充技巧:填充图案
- 下一篇: 外贸客户类型及跟进策略、找客户渠道