Firefox3の新機能 SmartBookmarkを使ってブックマークや履歴を一定の基準でリストアップする

(たしか)Firefox3beta5から、ブックマークツールバーに"Most Visited"や"Recently Bookmarked"という項目がデフォルトで入っているようになりました。プロパティをみてもタイトルしか表示されず、どういう仕組みになっているのかわかりません。表示する情報をいろいろ変えられるのならおもしそうだなーと思って、これの作り方を調べました。

smartBookmarks

以前からあるlivemarkと同じようなみためで、自分のブラウザの履歴やブックマークから一定の基準でフィルタされたデータがリスト表示されます。

ちなみにlivemarkはSafariやIE7にもついているRSSをブックマークのフォルダとして登録できて、RSSのアイテムひとつひとつがブックマークとして表示される機能のことです。ほかにもFirefoxにはmicrosummariesというXPathでページの特定の部分を取り出して表示するめずしい機能があったりします。しげふみメモ:livedoor Reader購読者数のライブタイトルなどをご覧ください。

作り方

ソースコードをみてみると、このブックマークはFirefoxをインストールしたときにbrowser/components/nsBrowserGlue.jsで作られるようになっていました。

Firefox3で新しく導入されたannotation serviceというのが持っている機能のようです。コードをみるとplace:queryType=1&sort=12&maxResults=10
のようなplace:ではじまるURLに似た文字列をnsINavBookmarksService#insertBookmarkに渡してブックマークを作った後、nsIAnnotationService#setItemAnnotationを設定しています。

どうやって作るかわかったところで試しにひとつ作ってみましょう。Firefox3では、ブックマークにタグがつけられるようになっているので、タグにtoseeとつけたブックマークを新しいもの順で10件表示するsmarkBookmarkを作ってみます。

特権の必要なコードを実行するために、まずchrome://browser/content/browser.xulを開きます。ウインドウでchromeのアドレスを開いているときはFirebugのコンソールで特権の必要なコードを実行することができるようになります。


var SMART_BOOKMARKS_ANNO = "Places/SmartBookmark";
var bookmarksToolbarIndex = 0;

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

var instance =  {
      _uri: function(aSpec) {
        return Cc["@mozilla.org/network/io-service;1"].
               getService(Ci.nsIIOService).
               newURI(aSpec, null, null);
      },
    run: function () {
      var smartBookmark = {
                     queryId: "ToReadBookmarks", 
                     itemId: null,
                     title: "toread",
                     uri: this._uri(
                                    "place:queryType=" +
                                    Ci.nsINavHistoryQueryOptions.QUERY_TYPE_BOOKMARKS +
                                    "&sort=" +
                                    Ci.nsINavHistoryQueryOptions.SORT_BY_DATEADDED_DESCENDING +
                                    "&terms=toread" +
                                    "&maxResults=" + 10 
                     ),
                     parent: bmsvc.toolbarFolder,
                     position: bookmarksToolbarIndex};

      smartBookmark.itemId = bmsvc.insertBookmark(smartBookmark.parent,
                                                      smartBookmark.uri,
                                                      smartBookmark.position,
                                                      smartBookmark.title);
      annosvc.setItemAnnotation(smartBookmark.itemId,
                                    SMART_BOOKMARKS_ANNO, smartBookmark.queryId,
                                    0, annosvc.EXPIRE_NEVER);
    }
};
instance.run()
コードは長いですが、重要なのはマゼンダで色を付けてある部分だけです。これで"toread"という名前のsmartBookmarkがブックマークツールバーに作られて、toseeというタグをつけたブックマークが表示されるようになります!(正確にはタグだけでなく、URLやページのタイトル、自分で書いた説明文にtoseeという文字列を含んでいるブックマークが表示されます)

place:で始まるパラメータをかえればほかのものを表示させることもできます。パラメータの解説は Places query URIs - MDC にあります。ざっとみたところ、ブックマークと履歴のデータをもとにして、特定の基準でデータをリストアップさせることができるようになっています。

twitter.comドメインでよくアクセスしているURL順で10件表示というようなこともできるので、何か面白い使い方ができると思います。GUIで簡単に設定したりできないのがもったいないところです....

tags

  • Firefox
  • 「Firefox3の新機能 SmartBookmarkを使ってブックマークや履歴を一定の基準でリストアップする」のはてなブックマーク数
  • 「Firefox3の新機能 SmartBookmarkを使ってブックマークや履歴を一定の基準でリストアップする」deliciousブックマーク数
  • 「Firefox3の新機能 SmartBookmarkを使ってブックマークや履歴を一定の基準でリストアップする」をはてなブックマークに追加
  • save "Firefox3の新機能 SmartBookmarkを使ってブックマークや履歴を一定の基準でリストアップする" to del.icio.us
  • 「Firefox3の新機能 SmartBookmarkを使ってブックマークや履歴を一定の基準でリストアップする」をリアルタイムブログ検索
  • permalink
  • jqueryのpackedバージョンは読み込みに(80msくらい)時間がかかる
  • javascriptで作るGearmanクライアント

comments

TypeKey Enabled
スタイル用のHTMLタグが使えます。
*required

trackbacks

トラックバック元エントリにこのエントリへのリンクがない場合はトラックバックを受け付けません。

http://labs.gmo.jp/mt/mt-tb.cgi/218
©2010 Kentaro Kumagai, GMO Internet Labs., GMO Internet, inc.
bits and bytes
2008 .05. 30 17:16

tagcloud

  • API1
  • C/C++2
  • E4X1
  • FUSE2
  • Firefox28
  • HTML4
  • IE1
  • MySQL1
  • OSX4
  • Opera2
  • PHP4
  • UI2
  • XML1
  • XPCOM4
  • XPath4
  • apache2
  • binary2
  • book1
  • data13
  • debug5
  • design1
  • experiments4
  • extension14
  • geo1
  • google gears2
  • google maps API1
  • greasemonkey4
  • httpd5
  • javascript21
  • linux1
  • logging2
  • mobile4
  • perl5
  • tips6
  • tool11
  • vim2
  • visualization3
  • widget1
  • wii3
  • windows7
  • サービス7
  • 和訳1

Archives

  • 2008.06 (1)
  • 2008.05 (5)
  • 2008.04 (4)
  • 2008.03 (4)
  • 2008.02 (6)
  • 2008.01 (3)
  • 2007.12 (4)
  • 2007.11 (5)
  • 2007.10 (4)
  • 2007.09 (4)
  • 2007.08 (4)
  • 2007.07 (8)
  • 2007.06 (7)
  • 2007.05 (4)
  • 2007.04 (5)
  • 2007.03 (6)
  • 2007.02 (4)
  • 2007.01 (6)

about

  • bits and bytesのXML
  • 「bits and bytes」のCreative Commons
  • Powered by Movable Type
  • イベントと地図 - モグ
  • Use ecto to blog!
  • bits and bytesのはてなブックマーク数
  • bits and bytesをMy Yahoo!に追加
  • Subscribe with Bloglines