「情報収集・整理ツールあれこれ (1)」に追記もしましたが、流動的なWEBページでは使えません。 まあこれはどうしようもないことであって、Dog Earsの仕様が云々という話ではないんで、もう気にしません。 Dog Earsは、過去にマークしたページを開いたとき、ツールバーのアイコンを切り替えて教えてくれます。 ところが、これはそのページを読み込んだ時に限定されちゃってるようです。
例えばタブA・タブBがあって両者ともDog Earsでマークしていないページを開いてるとします。 タブAにマークしたページを読み込むと、上述のとおりアイコンが変化します。 その後カレントタブをタブBに変えてもアイコンは変化せず、マークを付けていないはずのページで「Dog Earsのマークありまっせ」の状態になってしまいます。 逆も同じで、マークを付けたはずのページで「マークありまへん」の状態になってしまいます。
リロードすれば正しい状態になるのですが、お気に入りのアドオンとはいえDog Earsのためだけにリロードするなんてバカバカしいですよね。 なのでちゃんと変化するように改造してみることにしました。
前置きが長くなりましたが、もうちょっと続きますw
ご大層にもこんなタイトルで記事を書いているわけですが、俺、JavaScriptまったく知りません。 コードはなんとな〜く読めるのですが、うまく改造できるかどうかの見通しもまったく立ってません。 最終的には「俺には無理でした。 海見てくる・・・」ってことになるかもしれませんが、まあお付き合いください。
まず改造の方針を決めるところから始めました。 これも本ブログで取り上げたアドオンですが、Tabooにもツールバーアイコンがあります。 ブックマークしたページを記憶している点はDog Earsと同じで、読み込んだページが既に登録済みだとアイコンが変化します。 この時上述のようにタブの切り替えを行うと、それに応じてアイコンもちゃんと切り替わってくれます。 さあ、そうなればTabooのこのロジックをDog Earsに応用すればいいだけじゃん。 やっほい、案外簡単かもぉ♪
さてではTabooのJavaScriptコードの中で、上述の制御を行っている箇所を特定しましょう。 熟練の方々にはきっとファイル名だけで分かったんでしょうけど、なにせ右も左も分からないド素人なのでアイコン画像のファイル名をコード内で探しました。 ところがヒットするのはCSSファイル、つまり「見た目の体裁」を定義するファイルだけです。 え〜〜・・・いきなり躓いちゃったよ・・・。 しかし良く見ると、なにやらパラメータの有無で、切り替え前後のアイコンを変えてることが分かります。 どうやら制御部であるJavaScriptではこのパラメータの値だけを決定し、あとはCSSに任せているようです。 予想は見事的中、パラメータ名で検索すると"updateButton"というその名もズバリな関数を見つけることができました。
さて、ボタンを更新するこの関数ですが当然のことながらTabooにユニークな内容です。 他のアドオンに応用するには、細かい制御ではなくもっと抽象的な制御部分を知らなければなりません。 そこで"updateButton"関数を呼び出している箇所を探してみました。 次に見つけたのが、"onLocationChange"関数です。 これも名前がズバリですね。 前置詞onが付いているのでますますイベントハンドラ臭いです。 ここでLocation、つまりはカレントタブのURLが変化したことをハンドリングするのは間違いありません。 分からないながらに読んでみると、Tabooではこの関数の実装として、直前のURLと現在のURLを比較し、相違があれば"updateButton"関数を呼び出してアイコン変化の要否を判断させ、その後現在のURLを直前のURLとして保持し直す、ということをしています。 なあるほど。
次にさらに上位部分を探してみます。 "onLocationChange"関数はどうやら関数リストの一部として変数に格納されています。 そしてその変数の使用箇所は・・・gBrowser.addProgressListener?? はて、ファイル内にはその関数の定義がありません。 ってことは組み込みの関数なんだろうとネット検索してみましたが、英語力の無さがここで障害になりました。 ・・・う〜ん、分からん。
分からなすぎて若干飽きてきたので、今日はここまでです。 少〜しずつ勉強しよっと。

