Firefox Hacks 翻訳日記

アクセスカウンタ

zoom RSS 拡張機能作成メモ

<<   作成日時 : 2006/05/14 13:06   >>

トラックバック 0 / コメント 5

Find Toolbar Tweaks を作っていて気付いた事のメモ。
少なからず技術的な事項なので、これから拡張機能を作ってみよう、
という人以外には何の役にも立たないエントリだと思われる。
さらに、初心者ゆえの誤解もあると思われるので、ご指摘いただければ嬉しい。

1. Firefox 1.5 の preferances system

Firefox 1.5 から新しい preferances system が導入されていて、
prefs を読み書きするウィンドウの作成が簡単になっている。
基本的な書式は、window タグの代わりに prefwindow タグを使用して;
<prefwindow>
 <prefpane id="saveoptions" label="Backups">
  <preferences>
   <preference id="pref-backup" name="myapp.mybackups" type="bool"/>
   <preference id="pref-backupduration" name="myapp.mybackups.duration" type="int"/>
  </preferences>
  <checkbox label="Automatically Save Backups" preference="pref-backup"/>
  <textbox label="Duration:" preference="pref-backupduration"/>
 </prefpane>
</prefwindow>

てな感じだ。
xul ファイルだけでは動かず、js ファイルで起動時の設定を記述したところうまく動いた。

これがどれだけ簡単かは、piro さんちの
XUL Apps > Tips > prefs.js に設定を保存する・設定を読み込む - outsider reflex
と比較していただければおわかりになるだろう。
ただし、言うまでもなく、後方互換って何? というスタンスになって
Firefox 1.0.x では動作しないので、念の為。

また、prefpane を複数設定すれば Firefox の ツール → オプション と同じように
もれなくタブで prefpane を選択できるようになるのだが、
現状では、一つの xul ファイルに二つ以上の prefpane タグの中身を記述すると、
タブの並び順と中身の並び順がおかしくなるようだ。
これを回避するには、Firefox 本体の
\browser\content\browser\preferences\preferences.xul
のように、別々の xul ファイルを読み込む形にする必要があるだろう。

リファレンス(英文):
Firefox Extension Development Tutorial :: Preferences
Preferences System - MDC
Prefwindow

2. event.preventBubble() の使い方

これは browser.xul などに、山のように出てくるファンクション。
お恥ずかしい話だが、今までこのファンクションがどういう役割をしているか知らなかった。
簡単に言えば、「親要素に設定されているコマンドが、子要素では発動しないようにする」
ということだ。

「子要素で生じたイベントが親要素に伝播しないようにする」というファンクションで、
結果的に「親要素に設定されているコマンドが、子要素では発動しないようにする」
という使い方が出来る。
具体的には、Find Toolbar 自体に設定した「ダブルクリックで閉じる」が、
ツールバーのボタンをダブルクリックしたときには有効にならないようにしたい場合、
ボタンの方に
ondblclick="event.preventBubble();"

を設定する。

参照:
DOM Sample - Event:preventBubble

2006年5月16日追記
あ さんのご指摘を反映して、本文を修正しました。
なお、preventBubble は古いドラフトにあるもので、
W3C DOM 的に正しいファンクション名は stopPropagation だとの事です。
あ さん、ご指摘ありがとうございます。

3. 素朴な疑問

content と skin だけの拡張なら、とりあえず登録しておいて、後はプロファイルフォルダの
中身を改変していけば、いちいち圧縮せずにデバッグできるんだけど、
locale もある拡張ではこの手法は取れないのだろうか?
いろいろ試してみたけどダメだったので、
結局 content と skin と locale を jar で固めてしまった。
chrome.manifest か install.rdf の書き方(locale のパス指定)がまずかっただけなのかな?

追記
piro さんからのコメント↓で、やり直してみたところ、やはり私のやり方がまずかっただけ、
という事がわかった(^^;;;
piro さん、ありがとうございます。

テーマ

関連テーマ 一覧


月別リンク

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(5件)

内 容 ニックネーム/日時
こちらでは、localeもcontentやskinと同じ要領で使えてます。
何が原因なんでしょうね……
Piro
2006/05/14 13:38
piro さん、コメントありがとうございます。
上に追記したように、やり直してみたらうまくいきました。
どこが悪かったのかはよくわかりませんが、
install.rdf には em:locale の記述を入れない方がいい、というオチかも知れません。
今後ともよろしくお願いします。m(_|_)m
池田
2006/05/14 20:21
はじめまして。

> 2. event.preventBubble() の使い方

> 簡単に言えば、「親要素に設定されているコマンドが、子要素では発動しないようにする」
> ということだ。

実際にはこれでやっていることは、
イベント(クリックした、とか)が浮上する(親要素の方向へ伝わっていく)のを止める、
という文字通りの内容です。
イベントが親へ伝わらないということは、親に設定されているコマンドが発動しなくなりますので、
結果的には同じことなんですが、
文字通りに捕らえておかないと、なんで子要素側に書くのか、とかが
わからなくなってくるのではないかと思います。

2006/05/16 16:26
> これは browser.xul などに、山のように出てくるファンクション。

preventBubble は、後方互換性のために残されてはいますが、
今となっては stopPropagation を使うほうが正しいようです。
Firefox 1.5.0.* では、山ほど preventBubble が残ってしまっていますが、
Firefox 2 からは、ごっそり stopPropagation に直すようです。

https://bugzilla.mozilla.org/show_bug.cgi?id=330710#c0
> preventBubble/preventCapture will be probably removed soon.
って書かれてます。

2006/05/16 16:27
あ さん、池田です。コメントありがとうございます。
ご指摘を反映して、本文を修正の上、追記しておきました。
今度からは stopPropagation を使うようにします(^^;

今後ともよろしくお願いします。m(_|_)m
池田
2006/05/16 18:14

コメントする help

ニックネーム
URL(任意)
本 文
拡張機能作成メモ Firefox Hacks 翻訳日記/BIGLOBEウェブリブログ
文字サイズ:       閉じる