无法在加载项工具包API中设置firefox书签说明

时间:2012-01-30 12:23:17

标签: firefox firefox-addon firefox-addon-sdk

我找到了nsINavBookmarksService,但是从Firefox 3开始,它似乎没有任何API方法来获取/设置书签描述。 (API doc)

我已经看到其他附加组件将描述修改为同步数据存储的方法(这正是我试图做的)。我猜这个描述可能是一个非壁虎标准,这就是为什么它没有被直接支持,但是那时必须有一个完全不同的界面来操纵我还没有发现的书签。

任何人都可以帮助解决这个新手问题吗?

1 个答案:

答案 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);

供参考:nsIAnnotationService.setPageAnnotation()