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からなる。XULはXMLベースの言語で、UIコンポーネントをタグで記述するためのもの。これが超便利。レゴみたいな感じで楽すぎる。XULは配置とかしかできないので、ボタンをクリックしたらどうするとか、そういう機能に関することはJavascriptで書く。大体、XULファイルとJavascriptファイルが一対一で対応する感じ。
ここまで分かるとMDCという開発サイトにあるreferenceを見ながら適当に作れる。サンプルもいっぱいあるのでコピペでおk。
で、最初に書いた問題っていうのは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からブックマークのタイトル探さなきゃならなくね?めんどくさくね?重そうじゃね?
回避するには自前で新しいクラス作るしかなくね?それだとブックマークと共存できなくね?互いの移動が超めんどくさくね?同期とかできなくね?同期アドオンも書かなきゃならないんじゃね?
なにか良いアイディアがあれば。楽しいので作り続けますが。
以下参考に。タグとブックマークの実装について。