Chrome扩展之书签
Chrome為開發(fā)者提供了添加、分類(書簽文件夾)和排序等方法來操作書簽,同時也提供了讀取書簽的方法。
?
要在擴展中操作書簽,需要在Manifest中聲明bookmarks權(quán)限:
?
"permissions": [
"bookmarks"
]
在具體講解操作書簽的方法前,先讓我們來了解一下書簽對象的數(shù)據(jù)結(jié)構(gòu)。書簽對象有8個屬性,分別是id、parentId、index、url、title、dateAdded、dateGroupModified和children。這8個屬性并不是每個書簽對象都具有的,比如書簽分類,即一個文件夾,它就不具有url屬性。index屬性是這個書簽在其父節(jié)點中的位置,它的值是從0開始的。children屬性值是一個包含若干書簽對象的數(shù)組。dateAdded和dateGroupModified的值是自1970年1月1日至修改時間所經(jīng)過的毫秒數(shù)。只有id和title是書簽對象必有的屬性,其他的屬性都是可選的。id不需要人為干預(yù),它是由Chrome管理的。根的id為'0'。
創(chuàng)建書簽。可以通過create方法來創(chuàng)建書簽:
chrome.bookmarks.create({parentId: ,index: ,title: ,url: }, function(bookmark){console.log(bookmark); });?
請注意上面代碼的parentId屬性,'0'為根節(jié)點id,根節(jié)點下是不允許創(chuàng)建書簽和書簽分組的,
它的下面默認(rèn)只有三個書簽分組:書簽欄、其他書簽和移動設(shè)備書簽,如果創(chuàng)建時不指定parentId,則所創(chuàng)建的書簽會默認(rèn)加入到其他書簽中。create方法成功后會調(diào)用指定的回調(diào)函數(shù),回調(diào)結(jié)果是書簽對象。create方法支持指定的書簽屬性只有上述代碼中所列出的4個:parentId、index、title和url,其他屬性均不支持指定。如果不指定index,這個書簽就將自動添加到相應(yīng)父節(jié)點的尾部。
創(chuàng)建書簽分類。創(chuàng)建書簽分類的方法和創(chuàng)建書簽的方法大致相同,如果創(chuàng)建的書簽不包含url屬性,則Chrome自動將其視作為書簽分類。
調(diào)整書簽位置。通過move方法可以調(diào)整書簽的位置,這種調(diào)整可以是跨越父節(jié)點的,下面的代碼將id為m的書簽移動到了id為n的父節(jié)點第k個位置:
chrome.bookmarks.move(m, {parentId:n,index:k }, function(bookmark){console.log(bookmark); });更新書簽。通過update方法可以更改書簽屬性,包括標(biāo)題和URL,更新時未指定的屬性值將不會更改。下面的代碼將將id為m的書簽標(biāo)題改為'mm',URL改為'url':
chrome.bookmarks.update(m, {title: 'mm',url: 'url' }, function(bookmark){console.log(bookmark); });?
移除書簽。通過remove和removeTree可以刪除書簽,remove方法可以刪除書簽和空的書簽分組,removeTree可以刪除包含書簽的書簽分組。下面的代碼移除了id為m的書簽和id為n的書簽分組。請注意,下面的代碼實際上并不能看出刪除的是書簽還是分組,這要結(jié)合用戶的實際情況。
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.'); });?
下面我們來了解一下如何獲取用戶的書簽內(nèi)容。通過getTree方法可以獲得用戶完整的書簽樹,但請注意,如果用戶的書簽樹結(jié)構(gòu)過于復(fù)雜或內(nèi)容過多,getTree方法的效率會很低,而且也會消耗較多的資源,所以請考慮使用后面的方法按需獲取部分書簽樹。下面的代碼獲取了用戶的整個書簽樹:
chrome.bookmarks.getTree(function(bookmarkArray){console.log(bookmarkArray); });?
需要指出,上面的代碼的返回結(jié)果依然是一個數(shù)組,雖然這個數(shù)組永遠(yuǎn)都只包含一個元素,書簽樹的根節(jié)點。
getChildren方法可以返回以指定節(jié)點為父節(jié)點的下一級書簽節(jié)點,但不包括再下一級的節(jié)點,也就是說返回的書簽對象不包括children屬性,無論它是否具有子節(jié)點。通過這個方法我們可以一層一層地按需獲取用戶的書簽結(jié)構(gòu)。下面的方法獲取了根節(jié)點的所有子節(jié)點。
chrome.bookmarks.getChildren('0', function(bookmarkArray){console.log(bookmarkArray); });?
getSubTree方法可以返回自指定節(jié)點開始包括當(dāng)前節(jié)點及向下的所有節(jié)點,這個方法與getChildren的區(qū)別是返回值會包含父節(jié)點,且沒有層級限制,即包含書簽對象的children屬性。下面的代碼返回的結(jié)果與getTree方法返回的結(jié)果相同:
chrome.bookmarks.getSubTree('0', function(bookmarkArray){console.log(bookmarkArray); });?
get方法可以返回指定節(jié)點不包含children屬性的書簽對象數(shù)組,指定的節(jié)點可以是一個或多個。比如下面的代碼獲取了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.根節(jié)點的id為0
?
2.默認(rèn)只有三個書簽分組:書簽欄、其他書簽
?
?
3.我們收藏的內(nèi)容都在書簽欄下
4.開始遍歷根節(jié)點下的子節(jié)點 case Gome.Constant.ACTION.COLLECT_ALL_BOOKMARK:chrome.bookmarks.getChildren('0', function (bookmarkresult) {console.log("zy_child_bookmark:" + JSON.stringify(bookmarkresult));});break;?
?
5.判斷json數(shù)據(jù)是否是json數(shù)組的方法
var isArray = Array.isArray(data); console.log("zy_isArray:" + isArray);6.分析書簽遍歷方式
case Gome.Constant.ACTION.COLLECT_ALL_BOOKMARK://該方法返回整棵標(biāo)簽結(jié)構(gòu)樹,是一個json數(shù)組,現(xiàn)在需要的就是解析json數(shù)組chrome.bookmarks.getTree(function (bookmarkresult) {handler.onCollectAllBookmark(bookmarkresult);});break;?
?
總結(jié)
以上是生活随笔為你收集整理的Chrome扩展之书签的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CAD填充技巧:填充图案
- 下一篇: 外贸客户类型及跟进策略、找客户渠道