火狐扩展开发:添加书签功能的封装
这几日需要写一个给火狐浏览器增加书签的功能,需要实现给指定的书签文件夹添加文件夹和网址,封装了一些原生的方法。
参考资料:
1.XPCOM nsINavBookmarkObserver (火狐开放书签接口)
2.XPCOM nsINavBookmarksService (火狐开放书签接口)
3.Code Snippets Bookmarks (官方示例)
第一步:引入firefox的Bookmark API的常量;
var bmsvc = Components.classes["@mozilla.org/browser/nav-bookmarks-service;1"] .getService(Components.interfaces.nsINavBookmarksService); var htService = Components.classes["@mozilla.org/browser/nav-history-service;1"]. getService(Components.interfaces.nsINavHistoryService); var ioService = Components.classes["@mozilla.org/network/io-service;1"] .getService(Components.interfaces.nsIIOService); var menuFolder = bmsvc.bookmarksMenuFolder; // 书签菜单文件夹 var toolbarFolder = bmsvc.toolbarFolder; // 书签工具栏文件夹
第二步:给根书签工具栏根目录添加书签;
function addUrl(name, url) { var uri = ioService.newURI(url, null, null); if (!bmsvc.isBookmarked(uri)) {//检测网址是否存在 bmsvc.insertBookmark(bmsvc.toolbarFolder, uri,bmsvc.DEFAULT_INDEX, name);//添加书签 } }
第三步:给指定目录添加书签文件夹;
function addFolderUrl(folderType, folderName) { var query = htService.getNewQuery(); var options = htService.getNewQueryOptions(); query.setFolders([toolbarFolder], 1); var result = htService.executeQuery(query, options); var rootNode = result.root; var childFolder = 0; rootNode.containerOpen = true; //检测是否有同名的文件夹 for (var i = 0; i < rootNode.childCount; i++) { var node = rootNode.getChild(i); if (node.type == node.RESULT_TYPE_FOLDER && node.title == folderName) { childFolder = node.itemId; //创建文件夹 var newFolderId = bmsvc.createFolder(folderType, folderName, bmsvc.DEFAULT_INDEX); break; } } rootNode.containerOpen = false; };
相关推荐
baynkbtg 2020-01-10
yidaizongshi 2016-07-30
haokunaa 2015-07-12
travellers 2015-07-08
程序员俱乐部 2020-06-08
maowenbei 2020-06-04
jjddrushi 2020-05-14
maowenbei 2020-05-06
baynkbtg 2020-04-11
jjddrushi 2020-03-26
huavhuahua 2020-03-03
程序员俱乐部 2020-02-24
lengyu0 2020-02-22
程序员俱乐部 2020-02-17
jianghero 2020-02-14
jjddrushi 2020-02-11
jjddrushi 2020-01-23
baynkbtg 2020-01-14
jjddrushi 2019-12-27