Places migration guide

これは、Firefox 2 およびそれ以前のブックマーク・履歴 API を自分のコードで使っていて、それを Firefox 3 へ移行したいと考えている、拡張機能作者やアプリケーション開発者のためのドキュメントです。

概要

Places は、ブラウジング履歴と URI メタデータを管理するための API セットです。これには、履歴、ブックマーク、タグ、お気に入りアイコン (favicon)、注釈が含まれます。このシステムの識別方法には、URI と、ブックマークシステム内のアイテムに与えられる独自の識別子という、2 つのモデルがあります。API には、URI 中心のものと、アイテム識別子を使うものとがあります。API のシグネチャとコンテキストは、ほとんどの場合、どれが必要か明確になっています。

ブックマーク

ツールキットのブックマークサービスは nsINavBookmarksService です。

var bookmarks = Cc["@mozilla.org/browser/nav-bookmarks-service;1"].
                getService(Ci.nsINavBookmarksService);

ブックマークのデータストアは、フォルダとその内容を形にした、階層構造になっています。いくつかの特別なフォルダは nsINavBookmarksService の属性として利用できます。

  • nsINavBookmarksService.placesRoot - 階層のルートフォルダです。
  • nsINavBookmarksService.bookmarksMenuFolder - このフォルダの内容はブックマークメニューに表示されます。
  • nsINavBookmarksService.toolbarFolder - このフォルダの内容はブックマークツールバーに表示されます。
  • nsINavBookmarksService.unfiledBookmarksFolder - 「スター」が付けられているものの、どのフォルダにも保存されていないアイテムが含まれます。
  • nsINavBookmarksService.tagsFolder - このフォルダのサブフォルダはタグで、その子要素は、そのフォルダ名でタグ付けされた URI です。

注: このドキュメントはツールキットの Places サービスを取り上げています。しかしながら、Firefox 開発者は、次のようないくつかのブラウザ固有のヘルパー API も活用できます。

作成

ブックマークの作成

// ブックマークされる URI のための nsIURI を作成します
var bookmarkURI = Cc["@mozilla.org/network/io-service;1"].
                  getService(Ci.nsIIOService).
                  newURI("http://www.mozilla.com", null, null);

var bookmarkId = bookmarks.insertBookmark(
  bookmarks.toolbarFolder, // ブックマークを保存するフォルダの ID
  bookmarkURI,             // ブックマークの URI - nsIURI オブジェクト
  bookmarks.DEFAULT_INDEX, // 親フォルダ内のブックマークの位置
  "my bookmark title");    // ブックマークのタイトル

フォルダの作成

var folderId = bookmarks.createFolder(
  bookmarks.toolbarFolder, // 新しいフォルダを保存するフォルダの ID
  "my folder title",       // 新しいフォルダのタイトル
  bookmarks.DEFAULT_INDEX);    // 親フォルダ内の新しいフォルダの位置

区切り線の作成

var separatorId = bookmarks.insertSeparator(
  bookmarks.toolbarFolder, // 区切り線を保存するフォルダの ID
  bookmarks.DEFAULT_INDEX);    // 親フォルダ内の区切り線の位置

ライブブックマークの作成

var IOService = Cc["@mozilla.org/network/io-service;1"].
                  getService(Ci.nsIIOService);

var siteURI = IOService.newURI("http://www.mozilla.com", null, null);
var feedURI = IOService.newURI("http://www.mozilla.org/news.rdf", null, null);

var livemarks = Cc["@mozilla.org/browser/livemark-service;2"].
                getService(Ci.nsILivemarkService);

livemarks.createLivemark(bookmarks.toolbarFolder, // ライブブックマークを保存するフォルダの ID
  "My Livemark Title",        //ライブブックマークのタイトル
  siteURI,                    // サイトの URI - nsIURI オブジェクト
  feedURI,                    // 実際のフィードの URI - nsIURI オブジェクト
  bookmarks.DEFAULT_INDEX);   // 親フォルダ内のライブブックマークの位置

読み取り

アイテムのプロパティ

すべてのアイテム:

  • String getItemTitle(aItemId) - (要記述)
  • Int64 getItemIndex(aItemId) - (要記述)
  • PRTime getItemType(aItemId) - (要記述)
  • PRTime getItemDateAdded(aItemId) - (要記述)
  • PRTime getItemLastModified(aItemId) - (要記述)
  • Int64 getFolderIdForItem(aItemId) - 指定されたアイテムが含まれるフォルダの ID を返します。
  • String getItemGUID(aItemId) - アイテムのグローバル一意識別子を返します。これは主に、異なるプロファイル間でブックマークデータを同期させる拡張機能によって利用されることを意図したものです。

ブックマーク:

  • nsIURI getBookmarkURI(aItemId) - (要記述)
  • String getKeywordForBookmark(aItemId) - (要記述)

フォルダ:

  • Int64 getChildFolder(aFolderId, aSubfolderTitle) - 指定されたタイトルに一致する最初のサブフォルダの ID を返します。
  • Int64 getIdForItemAt(aFolderId, aPosition) - 指定された位置に存在するアイテムの ID を返します。(アイテムが存在しない場合は例外が投げられます)
  • Bool getFolderReadonly(aFolderId)

フォルダの中身

Places の検索は、メインの履歴サービスを通じて実行されます。以下の例は、ブックマークフォルダの中身を列挙し、それらのアイテム自体のプロパティにアクセスする方法を示したものです。

var history = Cc["@mozilla.org/browser/nav-history-service;1"].
              getService(Ci.nsINavHistoryService);
var query = history.getNewQuery();
query.setFolders([myFolderId], 1);

var result = histsvc.executeQuery(query, history.getNewQueryOptions());

// 検索結果のルートプロパティは、上で指定したフォルダに相当するオブジェクトです。
var folderNode = result.root;

// フォルダを開き、その中身も繰り返し開きます。
folderNode.containerOpen = true;
for (var i=0; i < folderNode.childCount; ++i) {
  var childNode = folderNode.getChild(i);

  // アイテムに付随するいくつかのプロパティ
  var title = childNode.title;
  var id = childNode.itemId;
  var type = childNode.type;
  
  // いくつかのタイプ固有のアクション
  if (type == bookmarks.TYPE_BOOKMARK) {

    var uri = childNode.uri;

  }
  else if (type == bookmarks.TYPE_FOLDER) {

    childNode.QueryInterface(Ci.nsINavHistoryContainerResultNode);
    childNode.containerOpen = true;
    ... // ここでサブフォルダの子要素に対して反復処理を行えます

  }
}

検索

更新

削除

  • アイテム
  • コンテナ

監視

インポート・エクスポート

新機能

  • タグ
  • 注釈
  • 検索条件の保存
  • ダイナミックコンテナ

履歴

追加

検索

監視

新機能



ドキュメントのタグと貢献者

 このページの貢献者: Mgjbot, Potappo, Kohei
 最終更新者: Mgjbot,