Manipulating bookmarks using Places

Places ブックマークサービスは、nsINavBookmarksService インタフェースによって提供されており、ブックマークやブックマークフォルダの作成、削除、操作を行うためのメソッドを提供します。この記事では、ブックマークサービスを利用して一般的なブックマーク管理作業を行う方法を、例を挙げて説明します。

ブックマークサービスの初期化

他の多くのインタフェースと同様に、ブックマークサービスを利用するには、まず以下のようにしてアクセスを取得する必要があります。

var bmsvc = Components.classes["@mozilla.org/browser/nav-bookmarks-service;1"]
                      .getService(Components.interfaces.nsINavBookmarksService);

ブックマークフォルダの新規作成

新しいブックマークフォルダの作成は nsINavBookmarksService.createFolder() メソッドを使って行います。例えば、ブックマークメニューに新しいフォルダを作成するには、以下のように記述します。

var menuFolder = bmsvc.bookmarksMenuFolder; // ブックマークメニューフォルダ
var newFolderId = bmsvc.createFolder(menuFolder, "Folder name here", -1);

このコードでは、ブックマークメニューフォルダを特定し、それからそのフォルダに「Folder name here」という名前の新しいフォルダを作成しています。フォルダを挿入するインデックスとして -1 を指定することで、ブックマークのリストの最後にフォルダが置かれます。

このコードのうち、bookmarksMenuFoldertoolbarFolder に変更すれば、ブックマークツールバー上に簡単に新しいフォルダを挿入できます。

ブックマークの新規作成

新しいブックマーク作成には nsINavBookmarksService.insertBookmark() を使用します。ブックマークの URI は nsIURI オブジェクトを使って指定する必要があります。

var ios = Components.classes["@mozilla.org/network/io-service;1"]
                    .getService(Components.interfaces.nsIIOService);
var uri = ios.newURI("http://google.com/", null, null);
var newBkmkId = bmsvc.insertBookmark(newFolderId, uri, -1, "");

この例では、IO サービスをインスタンス化し、それを使って Google の Web サイトを参照する nsIURI を作成した上で、nsINavBookmarksService.insertBookmark() を呼び出して Google のブックマークを作成し、それを <tt>newFolderId</tt> によって参照されているブックマークフォルダの最後に配置しています。

ブックマークアイテムの検索

サイトの URI を知っていて、それを指しているすべてのブックマークを検索したい場合は、nsINavBookmarksService.getBookmarkIdsForURI() メソッドを使います。

var ios = Components.classes["@mozilla.org/network/io-service;1"]
                    .getService(Components.interfaces.nsIIOService);
var uri = ios.newURI("http://google.com/", null, null);
var bookmarksArray = bmsvc.getBookmarkIdsForURI(uri, {});

このコードを実行すると、<tt>bookmarksArray</tt> という配列には、指定した URI (この場合は "http://google.com") を参照しているすべてのブックマークの ID が含まれます。

既存アイテムの操作

既存のブックマークやブックマークフォルダに変更を加えるために使える便利なメソッドがいくつもあります。この章ではそのうちのいくつかを取り上げます。

アイテムの名前

ブックマークやブックマークフォルダの名前を変更するには、nsINavBookmarksService.setItemTitle() メソッドを使います。

bmsvc.setItemTitle(newBkmkId, "New title");

ここでは、<tt>newBkmkId</tt> という ID で参照されているアイテムの名前を「New title」に設定しています。

アイテムの既存のタイトルは nsINavBookmarksService.getItemTitle() メソッドを使って取得できます。

var thisTitle = bmsvc.getItemTitle(newBkmkId);
alert(thisTitle);

このコードでは、<tt>newBkmkId</tt> という ID で参照されているアイテムの名前が含まれた警告ダイアログが表示されます。

アイテムの URI

同様に、nsINavBookmarksService.getBookmarkURI() メソッドを呼び出すことで、特定のブックマークアイテムに相当する URI を取得することができます。

var thisURI = bmsvc.getBookmarkURI(newBkmkId);
alert(thisURI.spec);

ここまで説明したサンプルコードをすべて実行した場合、この出力結果は "http://google.com" になります。

nsINavBookmarksService.changeBookmarkURI() メソッドを使えば、特定のブックマークアイテムの URI を更新できます。

uri = ios.newURI("http://mozilla.com/", null, null);
bmsvc.changeBookmarkURI(newBkmkId, uri);

この例では、Goole の代わりに Mozilla の Web サイトを参照するよう、ブックマークを変更しています。

註: 注釈、タグなど、他の情報はすべて、ブックマークの URI が変更されてもそのまま残ります。

ある URI がブックマークされているかどうかの確認

例えば、既にブックマークされているサイトに対して新しいブックマークを作成するのを避けたい場合など、特定の URI が既にブックマークされているかどうかを確認するには、nsINavBookmarksService.isBookmarked() メソッドを使います。

var ios = Components.classes["@mozilla.org/network/io-service;1"]
                    .getService(Components.interfaces.nsIIOService);
var uri = ios.newURI("http://mozilla.com/", null, null);
if (!bmsvc.isBookmarked(uri)) {
  bmsvc.insertBookmark(bmsvc.toolbarFolder, uri, -1, "Mozilla");
}

この例では、ユーザが既に Mozilla の Web サイトをブックマークしていないかどうかを確認し、もしされていない場合は作成して、ブックマークツールバー上に追加しています。

あるアイテムを含むフォルダの検索

あるアイテムが含まれるフォルダを知りたい場合は (これは nsINavBookmarksService.getBookmarkIdsForURI() を使って特定の URI のブックマークを探した後などに特に便利な機能でしょう)、nsINavBookmarksService.getFolderIdForItem() メソッドを使います。

var parentFolderId = bmsvc.getFolderIdForItem(newBkmkId);

関連記事

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

最終更新者: ethertank,