参考资料:
http://developer.mozilla.org/En/NsINavHistoryResultNode
http://developer.mozilla.org/En/NsINavHistoryResult
http://developer.mozilla.org/En/NsINavHistoryService
http://developer.mozilla.org/en/nsINavBookmarksService
http://developer.mozilla.org/En/NsILivemarkService
获取bookmarks的信息
声明以下用到的Cc, Ci是这两个的简称
var Cc = Components.classes;
var Ci = Components.interfaces;
firefox的书签信息都保存在这个接口服务中nsINavBookmarksService,你可以这样取出服务实例:
var bookmarksService = Cc["@mozilla.org/browser/nav-bookmarks-service;1"].getService(Ci.nsINavBookmarksService);
书签包括以下这些类型的信息:
类型: placesRoot
描述: The folder ID of the top-level folder that contains bookmarks, tags and all other Places data.
This contains administrative data as well as user data, and is therefore not recommended for use in queries.
类型:bookmarksMenuFolder
描述:The item ID of the Bookmarks Menu folder
类型:tagsFolder
描述:The item ID of the top-level folder that contains the tag "folders".
类型:unfiledBookmarksFolder
描述:The item ID of the Unfiled Bookmarks folder.
类型:toolbarFolder
描述:The item ID of the personal toolbar folder.
要获取某个类型的信息你就必须开启一个历史查询。
接口为nsINavHistoryService ,这样可以取出服务实例
var historyService = Cc["@mozilla.org/browser/nav-history-service;1"].getService(Ci.nsINavHistoryService);
// 创建新的query 和option 对象
var options = historyService.getNewQueryOptions();
var query = historyService.getNewQuery();
// 设置要查询的书签类型bookmarksService.bookmarksMenuFolder
query.setFolders([bookmarksService.bookmarksMenuFolder], 1);
// 执行查询,result 就是包含当前类型的所有书签信息
var result = historyService.executeQuery(query, options);
节点包括以下类型
Constant Value Description
RESULT_TYPE_URI 0 nsINavHistoryResultNode
RESULT_TYPE_VISIT 1 nsINavHistoryVisitResultNode
RESULT_TYPE_FULL_VISIT 2 nsINavHistoryFullVisitResultNode
RESULT_TYPE_HOST 3 nsINavHistoryContainerResultNode
RESULT_TYPE_REMOTE_CONTAINER 4 nsINavHistoryContainerResultNode
RESULT_TYPE_QUERY 5 nsINavHistoryQueryResultNode
RESULT_TYPE_FOLDER 6 nsINavHistoryQueryResultNode
RESULT_TYPE_SEPARATOR 7 nsINavHistoryResultNode
RESULT_TYPE_DAY 8 nsINavHistoryContainerResultNode
每个节点都有很多信息具体参考
https://developer.mozilla.org/En/NsINavHistoryResultNode
获取这些信息可以向下面这样:
var root = result.root // root 为根节点
var count = root.childCount; // 子节点的个数
var child = root.getChild(i); // 获取第i 个子节点
// 在获取子节点时一定要让它的containerOpen属性值等于true,要不然getChild函数返回不成功的
var url = child.uri; // 获取节点的url
var id = child.itemId; // 获取节点的id
var title = child.title; // 获取节点的标题
var type = child.type; // 获取节点的类型
// 常用的类型有
RESULT_TYPE_URI // bookmark
RESULT_TYPE_QUERY // query
RESULT_TYPE_FOLDER // folder
RESULT_TYPE_FOLDER(is_Livemark) // feed(传说中的RSS)
RESULT_TYPE_SEPARATOR // separator
很多信息都可以获取到,但是不同类型能获取的信息不一样,像type为separator时就没有title属性了,type为feed时就有siteurl和feedur属性等。
判断一个RESULT_TYPE_FOLDER的节点是否是一个feed时要用到nsILivemarkService 这个服务
var livemarkService = Components.classes["@mozilla.org/browser/livemark-service;2"].getService(Components.interfaces.nsILivemarkService);
var is_livemark = livemarkService.isLivemark(node.itemId);
if (is_livemark)
{
// 是feed,可以取出它的siteurl和feedurl了
var siteurl = livemarkService.getSiteURI(node.itemId).spec;
var feedurl = livemarkService.getFeedURI(node.itemId).spec;
}
else
{
// 仅仅是folder,没有siteurl和feedurl这两个属性
}
firefox中操作书签
最新推荐文章于 2024-06-03 14:54:10 发布