Firefox 3ではじめる拡張機能開発

第4回 機能を実装する(後編)

この記事を読むのに必要な時間:およそ 5.5 分

中編から引き続き,選択範囲の文字列からブックマークへタグ付けする処理などをJavaScriptで実装していきます。

その前に,処理を実装するために必要となるPlaces APIについて簡単な紹介をします。

Places API

ここからは,選択範囲の文字列からブックマークへタグ付けする処理などを実装していきますが,その前に,処理を実装するために必要となるPlaces APIについて簡単な紹介をします。

ご存知の通りFirefox 3ではブックマークと履歴の管理機能が一新されましたが,この新しい管理システムを「Places」と呼びます。Placesでは,ブックマークや履歴を操作するための多数のAPIがXPCOMサービスとして提供されいます。そのうち,今回使用するAPIの概要を表1に示します。

表1 使用するPlaces API(XPCOMサービス)の概要

XPCOMサービス概要
nsINavBookmarksServiceブックマークの追加,編集,削除といった一般的な操作を行う。
Manipulating bookmarks using Places - MDC
nsINavBookmarksService - MDC
nsITaggingServiceブックマークへのタグ付け,タグの削除などを行う。
Using the Places tagging service - MDC
nsITaggingService - MDC

表1に挙げた以外にも様々なAPIが存在します。詳しくは下記URLをご覧ください。

ブックマーク済みかどうかのチェック

ここからは,選択範囲を取得する処理の前に,現在表示しているWebページのURLがブックマーク済みかどうかをチェックする処理を追加します。また,ブックマーク済みでない場合は警告メッセージを表示して処理を終了するようにします。「overlay.js」リスト1の内容を追加してください。

リスト1 「overlay.js」への記述内容4(ブックマーク済みかどうかのチェック処理を追加)

var TagHelper = {
  generateTags: function() {
    var url = window.content.location.href;
    var ioSvc = Cc["@mozilla.org/network/io-service;1"].
                getService(Ci.nsIIOService);
    url = ioSvc.newURI(url, null, null);
    var bookmarksSvc = Cc["@mozilla.org/browser/nav-bookmarks-service;1"].
                       getService(Ci.nsINavBookmarksService);
    if (!bookmarksSvc.isBookmarked(url)) {
      alert('"' + window.content.document.title + '" is not bookmarked.');
      return;
    }
    var keywords = [];
    var sel = window.content.getSelection();
    for (var i = 0; i < sel.rangeCount; i++) {
      var keyword = sel.getRangeAt(i).toString();
      keyword = keyword.replace(/^\s+|\s+$/g, "");
      keywords.push(keyword);
    }
    Application.console.log("keywords = " + keywords);
    sel.removeAllRanges();
  },
};

あるURLがブックマーク済みかどうかを調べるには,表1に示したnsINavBookmarksServiceのisBookmarkedメソッドを使用します。nsINavBookmarksServiceのリファレンスに記載されている通り,isBookmarkedはnsIURIオブジェクトを引数とし,指定したURLがブックマーク済みかどうかを真偽値で返します。そこで,リスト1では,まずnsIIOServiceを使用してURLの文字列(変数「url」)からnsIURIオブジェクトを生成します。次に,nsINavBookmarksServiceを呼び出し(変数「bookmarksSvc」),isBookmarkedによって先ほどのnsIURIオブジェクトがブックマーク済みかどうかを調べ,戻り値がfalseなら警告を表示して終了します。

なお,リスト1では「Cc」「Ci」を使用していますが,これらは「browser.xul」から読み込まれるFirefox自体のJavaScriptソースファイル内で定義された定数で,それぞれ「Components.classes」「Components.interfaces」への参照です。

著者プロフィール

Gomita

拡張機能開発者。
現在までにScrapBook,FoxAge2ch,Tab Scope,FireGesturesの4つをリリースしている。

URLhttp://www.xuldev.org/

コメント

コメントの記入