Невозможно установить описание закладки Firefox для в API набора дополнений - PullRequest
2 голосов
/ 30 января 2012

Я нашел nsINavBookmarksService, однако, начиная с Firefox 3, похоже, что у него нет методов API для получения / установки описания закладки. (API doc)

Я видел, как другие дополнения модифицировали описание как метод синхронизированного хранения данных (это именно то, что я пытаюсь сделать). Я предполагаю, что, возможно, описание не является стандартом геккона, и поэтому оно не поддерживается напрямую, но тогда должен быть совершенно другой интерфейс для управления закладками, которые я не обнаружил.

Может кто-нибудь помочь с этой проблемой новичка?

1 Ответ

1 голос
/ 30 января 2012

Начиная с Firefox 3, закладки были объединены в базу данных Places, содержащую всю историю ваших просмотров. Таким образом, чтобы получить закладки, вы делаете запрос истории, например так (первая строка специфична для 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);
}

Это в основном совпадает с примером кода здесь . Ваша проблема, конечно, в том, что nsINavHistoryResultNode не имеет способа хранения данных, таких как описание. Однако вы можете установить аннотации, см. Использование службы аннотаций Places . Так что, если у вас уже есть переменная 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 ()

...