我找到了nsINavBookmarksService
,但是从Firefox 3开始,它似乎没有任何API方法来获取/设置书签描述。 (API doc)
我已经看到其他附加组件将描述修改为同步数据存储的方法(这正是我试图做的)。我猜这个描述可能是一个非壁虎标准,这就是为什么它没有被直接支持,但是那时必须有一个完全不同的界面来操纵我还没有发现的书签。
任何人都可以帮助解决这个新手问题吗?
答案 0 :(得分:1)
从Firefox 3开始,书签已合并到包含所有浏览历史记录的Places数据库中。因此,要获取书签,请执行历史记录查询,例如(第一行是specific to the Add-on SDK,您似乎正在使用):
var {Cc, Ci} = require("chrome");
var historyService = Cc["@mozilla.org/browser/nav-history-service;1"]
.getService(Ci.nsINavHistoryService);
var options = historyService.getNewQueryOptions();
var query = historyService.getNewQuery();
query.onlyBookmarked = true;
var result = historyService.executeQuery(query, options);
result.root.containerOpen = true;
for (var i = 0; i < result.root.childCount; i++)
{
var node = result.root.getChild(i);
console.log(node.title);
}
这与代码示例here大致相同。您的问题当然是nsINavHistoryResultNode无法存储描述等数据。但是,您可以设置注释,请参阅Using the Places annotation service。因此,如果您的书签已经有node
变量:
var annotationName = "my.extension.example.com/bookmarkDescription";
var ioService = Cc["@mozilla.org/network/io-service;1"]
.getService(Ci.nsIIOService);
var uri = ioService.newURI(node.uri, null, null);
var annotationService = Cc["@mozilla.org/browser/annotation-service;1"]
.getService(Ci.nsIAnnotationService);
annotationService.setPageAnnotation(uri, annotationName,
"Some description", 0, Ci.nsIAnnotationService.EXPIRE_NEVER);