(たしか)Firefox3beta5から、ブックマークツールバーに"Most Visited"や"Recently Bookmarked"という項目がデフォルトで入っているようになりました。プロパティをみてもタイトルしか表示されず、どういう仕組みになっているのかわかりません。表示する情報をいろいろ変えられるのならおもしそうだなーと思って、これの作り方を調べました。
以前からあるlivemarkと同じようなみためで、自分のブラウザの履歴やブックマークから一定の基準でフィルタされたデータがリスト表示されます。
ちなみにlivemarkはSafariやIE7にもついているRSSをブックマークのフォルダとして登録できて、RSSのアイテムひとつひとつがブックマークとして表示される機能のことです。ほかにもFirefoxにはmicrosummariesというXPathでページの特定の部分を取り出して表示するめずしい機能があったりします。しげふみメモ:livedoor Reader購読者数のライブタイトルなどをご覧ください。
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で簡単に設定したりできないのがもったいないところです....
トラックバック元エントリにこのエントリへのリンクがない場合はトラックバックを受け付けません。
http://labs.gmo.jp/mt/mt-tb.cgi/218
comments