add-on for Firefox3

昨日書いたことを実現しようと思ってjavascriptに初挑戦してたんだけど思わぬところで行き詰ってしまわれた。ふっじさーん。

以下メモ的な。間違ってるかも。

Firefox はコンテンツ領域(webページを表示するとこ)とそれ以外のUIを区別してて、後者の集まりをchromeと呼ぶ。メニューバーとかツールバーとかブックマークとかは全部chromeのひとつ。Firefoxのadd-onは、このchromeを追加することで実現する。既存のchromeの集合に新しいchromeをくっつけることをoverlayするとか言うっぽい。

このchromeは以下の3要素から構成される。

  • content
  • locale
  • skin

localeは言語の違いを吸収するもので、skinは色とかフォントとか画像とかに関するもの。なのでこの2つは、いっちばん上の皮のとこだけ関係するので別に必要ない。大事なのはcontent。

content の中にUIの構成要素とそれらの各操作に対するアクションを書く。contentはXULというフォーマットのファイルと、それに対応する Javascriptからなる。XULXMLベースの言語で、UIコンポーネントをタグで記述するためのもの。これが超便利。レゴみたいな感じで楽すぎる。XULは配置とかしかできないので、ボタンをクリックしたらどうするとか、そういう機能に関することはJavascriptで書く。大体、XULファイルとJavascriptファイルが一対一で対応する感じ。

ここまで分かるとMDCという開発サイトにあるreferenceを見ながら適当に作れる。サンプルもいっぱいあるのでコピペでおk。

MDN Web Docs

で、最初に書いた問題っていうのはFirefoxの仕様に依存することなんですが。

オレの勝手な思い込みで、ブックマークというのが大きなクラスとしてあって、そのプロパティなりなんなりでタグがあると思ってたんですね。↓みたいな感じで。

BookmarkClass:ブックマークを表す
BookmarkClass.title:ブックマークの名前
BookmarkClass.uri:ブックマークのURI
BookmarkClass.tags[]:ブックマークのタグ(配列)
・・・

ところがこれが違うっぽいんですね。。。

Places Developer Guide - Mozilla | MDN

によると、

The tagging of URIs is provided by nsITaggingService. The service is URI-centric, meaning that consumers can tag URIs directly, without first creating a bookmark. The unique identifier is the URI, and all APIs require URIs as nsIURI objects.

おhwwwwwwいや、たぶんブックマーク作らなくておkっていうのがgoalなんだろうけど。。。いや、楽なんだけど。。。

これをやると、タグごとに表示したいときって、いちいちURIからブックマークのタイトル探さなきゃならなくね?めんどくさくね?重そうじゃね?

回避するには自前で新しいクラス作るしかなくね?それだとブックマークと共存できなくね?互いの移動が超めんどくさくね?同期とかできなくね?同期アドオンも書かなきゃならないんじゃね?

なにか良いアイディアがあれば。楽しいので作り続けますが。

以下参考に。タグとブックマークの実装について。