firefox中操作书签

参考资料:

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这两个属性
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值