Firefox/Mozilla関係のブログ記事概要
メイン / Net・コンピュータ / Firefox/Mozilla関係長らく注力していた、XUL チュートリアル の翻訳作業が、一応完了したので、忘れかかっていた当初の目的を実現するべく、とりあえずは例題レベルから再開したいと思います。
単なる要素の確認は、チュートリアルの例を表示すれば足りるので、XUL に言及しているサイトを Google で検索したとき、チュートリアルに記述されていない事項として特に言及が多かった、ローカルファイルの入出力を試してみたいと思います。
ちなみに、 MDC では、ファイル I/O の例は Code snippets:File I/O に詳しく説明されています (英語版です)。
定番の Piro さんの XUL Tips を参考にして超簡単な XUL 版ファイルエディタを作成してみることにします。
まずは、XUL 要素から...
<toolbox>
<toolbar id="file-toolbar">
<toolbarbutton label="Open" oncommand="openFile();" />
<toolbarbutton label="Save" oncommand="saveFile();" />
</toolbar>
</toolbox>
<textbox id="edit-area" multiline="true" flex="1" />
必要最低限ということで、ツールバーに Open と Save ボタンを置いて、編集用のテキスト入力欄を置くだけです。
で、Open ボタンが押されたときにハンドラから呼ばれる openFile 関数は、以下のように作成します。
function openFile()
{
var nsIFilePicker = Components.interfaces.nsIFilePicker;
var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
fp.init(window, "Open File", nsIFilePicker.modeOpen);
var res = fp.show();
if (res == nsIFilePicker.returnOK) {
var file_in = Components.classes['@mozilla.org/network/file-input-stream;1'].
createInstance(Components.interfaces.nsIFileInputStream);
var s_in = Components.classes['@mozilla.org/scriptableinputstream;1'].
createInstance(Components.interfaces.nsIScriptableInputStream);
var tbox = document.getElementById("edit-area");
var thefile = fp.file;
try {
file_in.init(thefile, 1, 0, false); // open as "read only"
s_in.init(file_in);
var size = s_in.available();
tbox.value = s_in.read(size);
s_in.close();
file_in.close();
} catch(e) {
alert(e);
}
}
}
ここでは、まず 「開く」「保存」ダイアログ にしたがって、 nsIFilePicker を、modeOpen で作成します。
で、nsIFilePicker.returnOK が、戻ってきた場合はコンポーネントからファイルを取得して、そのファイルを nsIFileInputStream に渡して読み込みます。
ここまでは、想定の範囲なのですが、Piro さんの例では、さらに nsIScriptableInputStream も使っています。これは何をするものか分からなかったので、XUL Planet の XPCOM リファレンス で、調べてみることにします...
どうやら、nsIFileInputStream の read メソッドは、[noscript] なのでスクリプトからは利用できず、必ず nsIScriptableInputStream でラップする必要があるみたいです。ふむふむ。
オブジェクトができたら、available でサイズを取得して、その長さ分 read して、textbox の value に突っ込めばおしまいです。
エラーは面倒なので、手抜きで catch したら、そのまんま alert に渡すようにします。
Open がうまくいったら、次は Save を作成します。
function saveFile() {
var nsIFilePicker = Components.interfaces.nsIFilePicker;
var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
fp.init(window, "Save File", nsIFilePicker.modeSave);
var res = fp.show();
if (res == nsIFilePicker.returnOK ||
res == nsIFilePicker.returnReplace){
var out = Components.classes['@mozilla.org/network/file-output-stream;1'].
createInstance(Components.interfaces.nsIFileOutputStream);
var tbox = document.getElementById("edit-area");
var thefile = fp.file;
try {
out.init(thefile, 0x2a, 0x200, false); // open as "write only"
out.write(tbox.value, tbox.textLength);
out.close();
} catch(e) {
alert(e);
}
}
}
こちらもやっていることは Open と基本的に変わらず、モードを出力に変更されていたり、コンポーネントが nsIFileOutputStream に変更されているだけです。
Piro さんの例では、ファイルがある場合は削除してから、新規作成していますが、これも面倒なので PR_CREATE_FILE (0x08) と、PR_TRUNCATE (0x20) も追加して、0x2a を指定することで nsIFileOutputStream でさせるようにします。
実行は、ローカルファイルのアクセスなので、マニフェストファイルで登録した、ディレクトリに置いて、chrome URL でアクセスする必要があります。
...なんかエラーがあるようですが、何が悪いのか分かりません (;_;)
調べると Firefox のデフォルトでは chrome のエラーは、JS コンソールには出力されないようです。一般利用者には、不要かもしれませんが、開発するときは不便極まりないので、設定を変更します。ついでに チュートリアルにも tip として追記しておきます。(イベントハンドラの追加)
修正して再実行します。
OK。
今日は、午前中自動車の免許更新手続きをした後、Mozilla Party JP 7.0に行ってきました。
いろいろ、興味深い話も聞けましたし、英語のヒヤリング能力の衰えを実感したりと、中々有意義な半日でした。(^^;
最後の Piro氏のセッションのとき、質問させてもらったのですが、自分の考えの表明を無理に質問にしようとして、ちょっと支離滅裂にになってしまったんで、もう一度文章にしてみようと思います。(^^;;;;
Piro氏がセッションで指摘していましたが、現状の Firefoxの拡張機能は、インストールされてしまえば、やり放題だそうです。
とりあえず、運用的な対処としては、作者を信頼するか、悪意のないことをレビューしてくれる信頼できる再配布元からダウンロードするしかないのかもしれないですが、そもそもインストールされたらやりたい放題という方もなんとかできるのではないかというのが、セッションと後の質疑を聞いていて考えたことです。
つまり、拡張が利用できる権限を「特権なし」から「フルアクセス可」までで、何段階かにレベル分けして、拡張をインストールするときに、インストーラで与えて欲しい権限を利用者に提示するようにすれば、不自然な権限を欲する拡張は、有る程度の知識があるひとならば、インストール時に不審に思ってチェックできるのではないかということです。(気づくひとがいれば、すぐ掲示板なんかでも情報が流れるでしょう)
あるいは、これは、今考えたことなのですが、Addonsのような専門サイトに再配布を依頼するのなら、こういったサイトには必要な権限を、ここの操作レベルまで詳細化された項目で設定する形で申請するようにして、配布サイトは不必要な権限まで設定されていないことを、詳細に審査・確認するようにすれば、プログラム全部をチェックするよりも簡単で、実効性のあるチェックができるのではないかなぁとか思うわけです。この場合、インストーラでは、権限を確認した再配布元の署名と、署名者によるインストール後与えられる権限の概略説明ぐらいを利用者に提示して、インストールの許可を確認することになるという感じです。
この方法なら、プログラムの更新も追加で新たな権限が必要にならない限りは、簡単な確認ですむとか、悪意のある者がソースを入手して改ざんしても、権限が弱ければ、結局大したことはできないだろうというメリットがあるんではないかと考えます。
でも、このやり方だと、どっかの Windowsのように、横着で不必要に最大権限で動作させなければならないプログラムが氾濫するのをどれだけ従わせることができるかが、やはり鍵のような気はしますが...
MDC の XULチュートリアルを読んでいく企画の続きです...
XUL には、確かに「プログレスメータ」みたいな、XUL ならではの要素もあって中々面白そうなのですが、でも、「なぜ (HTMLではなく) XULが必要なのか」ということが、ここまで読んだ分ではわかりませんでした。
実際、「HTML 要素を追加する」まで読み進めると、HTMLもほぼ自由に使えるようで、XUL って、ひょっとして「車輪の再発明」とか考えてしまったりした時期が私にもありました。 (^^;;;;;;
この疑念が自分なりに解消したのは、もう少し読み進めて、ボックスモデルとスペーサーといったレイアウトの話が出てきてからです。
ちょっと脱線しますが、私の中で「どうして HTMLには無いんだろ。あったら便利なのに」と思い続けていたもののひとつに、TeXの グルーがありました。
そういえば TeX は、X68000とか djgccとかで頑張ってたころが一番面白くて、最近はもっぱら HTMLか、OOo になってしまいました。我ながら軟弱になったものです。 (^^;;;;;;;
まぁそれは置いておいて、TeXのグルーは、文字と文字の間 (正確にはボックス間)にあって、状況とパラメタに応じて自在に伸縮してレイアウトを調整するカラクリです。
これを使えば、右寄せも、均等割り付けも、中間にスペースを取るのも自由自在で、HTMLで、似たようなレイアウトをしたいときに、「グルーがあれば orz」と思ったことは一回ではありません。
XUL には、似たような概念として、スペーサーという要素と、flex 属性があって、最初に読んだときは「あぁこれは!」と思いました。
それ以外も、HTMLは、基本はベタなテキストを適宜マークアップするのに便利なように設計されているのに対して、XUL はボックスモデルを基本とすることで、入力フォームのような機能的なウィンドウをレイアウトするのに便利な設計になっていて、確かにこれなら、新たな仕様を覚える価値があるのかな。と思うようになったわけです。(^^;;;;;;;
長期連載(?)の「XULチュートリアル」を (訳して) 読んでいく企画の続きです...
まず、ボタンです。
これは、前回フライングで追加したので済んでますね。(^^;;;
表示させるだけなら簡単です。
で、サクっと次のラベルに移ります...
サクっと・・・ん? XULファイルにラベルのサンプルを追加しても、変更が反映されません。(;_;)
そういえば、kozawaさんにコメントで教えてもらったページに何か書いてあった気がします。
「XULアプリの開発環境を整える」の「XULのキャッシュを切る」をやっておいた方が良さそうです。
prefs.jsを 直接編集してもいいのですが、Windowsだと、置いてあるディレクトリに行くまでが大変なので、Firefoxのロケーションバーで 「about:config」使って編集することにします。
隠し設定なので、右クリックでメニューを出して「新規作成→真偽値」を選んで、設定名に「nglayout.debug.disable_xul_cache」を設定して、値は「true」で追加します。
・・・今度は、ちゃんと反映されます。うまくいっているようです。
訳もアップした手前、書かれている内容は、一通りやってみようと思い、descriptionタグで出したウィンドウをリサイズして、複数行にしてみます...
「-chrome」で、ウィンドウを開くと(デフォルトだと)リサイズできません。
こちらはチュートリアルからリンクされているサンプルをクリックしてブラウザウィンドウ内で表示させれば OKでした。
んで、続けてテキスト入力フィールド。
まぁ、HTMLの inputと、textareaがひとつの textboxなところが、ミソといえばミソ。
XULでは、textboxとか、descriptionみたいに、機能のバリエーションを単独タグ+属性値と開始/終了タグで使い分ける設計が好きなようです。
チェックボックス・ラジオボタンは、HTMLだと、単に「近くに書かれたテキスト」以上は関係なかったラベルが、ボタンの属性になってます。
さらに、リストボックスとメニュー。
Windowsの エクスプローラーで表示を「詳細」にしたときのような、複数カラムのリストボックスとか、テキストを変更可能なドロップダウンメニューとか、いくつか便利そうな要素があるようです。このあたりは HTMLにもあるとうれしいんだけどなぁと思ったり...
・・・長いので、次回に続きます。
前回からやっているXULチュートリアルの実習作業の続きです。
実習内容を見ると、この手のコマンドライン作業は Linux でやったら簡単だなぁと思いながらも、とりあえず、読者が多そうな Windows 環境で進めてみることにします。
# とかいいながら、Cygwinを使うんですが...(^^;;;;
私は、DOSや OS/2の時代から、個人の作業で作成するファイルは、C:\workに集めることにしているんで、今回のディレクトリも C:\work\findfile で行きたいと思います。(「Manifest Files」のチュートリアルは、パッケージ名が「findfiles」になっていますが、後の 「Creating a Window」のページ以降では、「findfile」なので、「findfile」で作成します。このあたりは仕様変更されて日が浅いので英語ページも間違いや古い記述が残っているようです...)
それはさておき、とりあえずチュートリアル用のディレクトリを作成します。
$ cd /cygdrive/c/work/
$ mkdir findfile
$ cd findfile/
$ mkdir skin locale content
続いて Firefoxのインストールディレクトリの chromeに移動マニフェストファイルを作成します。
$ cd /cygdrive/c/Program\ Files/Mozilla\ Firefox/chrome/
$ notepad findfile.manifest
~~中身は自分の環境にあわせて、とりあえずこんな感じにしておきます。
content findfile file:///C:/work/findfile/content/
skin findfile classic/1.0 file:///C:/work/findfile/skin/
locale findfile en-US file:///C:/work/findfile/locale/
マニフェストが出来たら、チュートリアルのページを 「ウィンドウを作成する」に移して、実際に表示させてみます。
読んでみればわかるのですが、このセクション「ウィンドウを作成する」となっていますが、作成されたウィンドウに中身がないので、作成しても表示できないという微妙なところで終わることになります...(^^;;;
ともかく、ファイルもないと、マニフェストが間違ってないかも確認できないので、findfile.xulを作成してみます。
$ cd /cygdrive/c/work/findfile/content
$ notepad findfile.xul
~~ 中身は、チュートリアルの内容をコピー ~~
とりあえず、「file:///c:/work/findfile/content/findfile.xul」をロケーションバーに入れて見ます。何もでないですが、タブのタイトルが「Find Files」なのでうまく読めているようです。でもこのままだと、さすがに寂しいので、ちょっとフライングして次回の内容からボタンを追加するための記述をコピーしてみます。リロードすると今度はボタンが表示されます。(引き伸ばされて一瞬なんだと思いますが...)、まぁ OKということで。
お次は、本題、chrome://findfile/content/findfile.xul で、アクセスします。
$ cd /cygdrive/c/Program\ Files/Mozilla\ Firefox/
$ ./firefox.exe -chrome chrome://findfile/content/findfile.xul
ん?出ません。おっと、Firefoxは一旦停止させないとだめなんでした...
・・・実は、うまく表示させることができずに数時間あれこれ試してました...;
・・・不毛なので結論だけ書くと、止めたはずの Firefoxが、完全に止まっていなかったから、マニフェストを認識してくれなかっただけで、タスクマネージャから残っていた firefoxを停止させてからやれば、OKでした...orz
まぁ、おかげで大分勉強にはなりましたが。(負け惜しみ) (^^;;;;
次回も、また3セクションぐらい進んだらまとめて書きたいと思います。
Mozillaの GUIを定義するための言語である XUL について調べるために、XULチュートリアルを読んでみようと思います。
勢いで、MDCに上がっていない分のアップについても名乗りを上げてしまったので、かなり長期的な取り組みになりそうですが... (^^;;;;;;;;;;
初期の目的が遠くなっていく気もしますが、気にせずやっていくことにします。
# 目的なんで、手段を楽しむための方便なのが趣味の世界な気がするし...
チュートリアルの「はじめに」、「XULの構造」、「Chrome URL」このあたりは基本的に概念や解説で、特にここで加えておこうと思うようなこともないので、大胆に端折ってしまうことにします。(^^;;;;;;;
# とはいっても読んでないわけじゃないので誤解なきよう (^^;;
で、マニフェストファイルから、実習作業をする話が出てきます。
ところで、マニフェストというと、ちょっと前に選挙でテーマになった記憶しかありません。Mozillaの世界が選挙と関係あるとは思えないので、本題に入る前にちょっと調べてみます。
manifestを、辞書で調べると、明白なとか明示するとかいった意味が書かれています。
そういえば、選挙のマニフェストというのは、政権を獲得したら実施する政策を、具体的な実施方法や実現可能であるという裏づけとともに記述したものだったはずです。(違ったらすんません)
チュートリアルのページを読んでいくと、Mozillaのマニフェストは、仮想の chrome の世界と、現実のファイルシステムなどのマッピングなどを定義するようで、仮想の世界を現実にどう落とすかということを書くという意味では、まぁ選挙のマニフェストと共通点がないこともないのかもしれません。(ちょっと強引?)
ここで書かれている内容は、最終的に Extension を作成していく段階までくれば、ピンとくるんだと思いますが、現在の私の経験値ではまだ「ちょっと試せる」部分は少ないので、とりあえず今は、青線で強調された「ファイル検索ダイアログ作成実習」のための部分を試してみるに留めることにします。
ちょっと長くなりそうなので、今回はこの辺にして実際の作業については次回にしたいと思います...
「赤点・補習の常連で、パスポート持ったこともないこの俺が、何の因果か翻訳部門...」いや、マジで。(^^;;;;;;;;;;;
> ちなみに各ページは Wiki形式で記述されていて、赤字のフォントが該当ペー
> ジなし≒未翻訳のようです。アカウントを作成すれば誰でも編集可能だそうで
> すが...まぁ今は考えないことにします。(^^;;;
とか、書いたのはそんなに前でもないのですが、結局 1ページ訳した上に、Mozilla Japan 翻訳部門フォーラムにユーザ登録してしまいました。
せっかくなんで、XULチュートリアルあたりを中心に勉強ついでに、未訳部分は登録と、欲張ってみようと思います。全部やったら大学で単位もらえるぐらいのボリュームあるけど。(^^;;;;;;;;
で、そのときのメモでブログを更新と、一石三鳥を狙ってみようとか、考えているわけです。(^^;;;;;;;;;;;;;;;;;;
とりあえず、この週末に第1回を書こうと思います。(と、自分にプレッシャーをかけておく) (^^;;;;;;;
Extensionはインストールされると Firefoxの中に組み込まれます。
今回は「拡張の作成 - Firefoxまとめサイト」と、「XUL_Tutorial:The Chrome URL」などを読みながら、組み込まれた Extensionから見える Mozillaの世界を探ってみたいと思います。
ブラウザからネット上のページにアクセスするときは、「http://」で始まる URLでページの場所を指定すると思います。少し薀蓄を書くと、この URLというのは 「Uniform Resource Locator」のことで、ブラウザなどのプログラムが、「リソース(画像や HTMLのファイル、サービスなど)」にアクセスするために必要な情報を、統一された形式で表現できるように決められたものです。
このために、先頭が「http:」で始まっている場合は、このリソースはネット上にあり、アクセスする場合は HTTPを使用して、後に書かれているホストに接続すればいいことをブラウザが理解するわけです。(なおURLの仕様では、この httpなどを示す部分をスキーム(scheme)と呼ぶようです)
さらに、ブラウザでは「file」というスキームを使うことで、ネット上だけでなくローカルなファイルなども示すことが出来るようになっています。
そして、Mozillaでは、Extensionやテーマなどの拡張機能のために、インストールされたファイルにアクセスするための専用スキーム「chrome」を用意しているようです。
この chromeスキームを使用することで、Extensionでは、ブラウザがインストールされた物理的な場所や、OS、そのときの Mozilla本体の都合などに影響することなくシンプルな記述で必要なリソースにアクセスできるという訳です。
しかし、chrome(メッキ)だと、沢山インストールするとメカゴジラみたいにピカピカの Mozillaが出来上がりそうですね。(^^;;;;
まぁ講釈はこの辺にしておいて、helloworld.xpiの中を確認します...
確かに展開したディレクトリに「chrome」があります。
中には jarファイルが1つあるので、これも展開します。この jarファイルはインストール後もアーカイブのまま置かれて利用されるようなので2重にアーカイブされる構造になっているようです。(だから jarの方は非圧縮らしい)
jarを展開して出来るディレクトリには contentと skinがあり、まずcontentの方を見ると、さらに helloworldディレクトリがあって、その中に必要なファイルが置かれているようです。
ファイルを見ていくと、ここにも RDFファイルがあります。
軽く調べてみると、このファイルは色々書くことがありそうなので、今回はここまでにしておきたいと思います...(^^;;;;;;;;;
拡張の作成 - Firefoxまとめサイトを読みながら Extensionの作成方法を調べる作業も、そろそろ佳境にさしかかりつつあります。
自分で Extensionを作成するという最終目的を考えると、このあたりでチュートリアルだけでなく、ちゃんとしたリファレンスもチェックしておきたいところです...
探してみると...MDC(Mozilla Developer Center)が公式の開発情報をまとめたサイトのようで、最新の firefox1.5対応の開発関係ドキュメントなんかがまとめられているようです。まだ日本語化されていないページもあるようですが、まぁ、元々英語のページを読む覚悟はあったので、日本語化されたページがあるだけラッキーと思うことにします。
ちなみに各ページは Wiki形式で記述されていて、赤字のフォントが該当ページなし≒未翻訳のようです。アカウントを作成すれば誰でも編集可能だそうですが...まぁ今は考えないことにします。(^^;;;
とりあえず、置かれているドキュメントから見ておきたいものをチェックしておきます。
「拡張機能の作成方法」は、今読んでるチュートリアルとダブるところも多そうですが、最新版対応ですし、日本語対応(多言語化)などこちらにしかない話もありそうなので、ざっと読む必要がありそうです。
「Extension Frequently Asked Questions」は、英語なので内容はチェックしていませんが、やはりFAQぐらいは確認するべきな気がします。
「XULのチュートリアル」も結構ボリュームがありそうですが、やはり避けては通れない感じです。
後は...必要になったら探しましょう。だいぶん宿題も増えたことですし...(^^;;;;;;
拡張の作成 - Firefoxまとめサイトを参考に Firefoxの Extension作成方法を調べる作業を再開します...
helloworld.xpiを展開すると、chrome/helloworld.jarの他に、install.jsと install.rdfの2つのファイルが作成されます。
install.jsは、「js」が示すように Javascriptのようで、インストール時に起動されてインストール処理を行うようです。(但し、0.9以降の Firefoxでは拡張マネージャが処理するので不用になったらしいですが)
では、install.rdfは、何でしょう?
RDFといえば、ブロガーにはお馴染みの RSSと関係ある何かだった記憶があるのですが、インストーラとはどういう関係があるのでしょうか。ちょっと Googleで調べてみます...
Wikipediaを読むと、最初の RSS0.9のときは、RSS ==「RDF Site Summary」で、RSSの「R」は、RDFそのもののようですが、では、結局 RDFはなんなんでしょう。もう少し Googleのお世話になります...
「The Web KANZAKI」の、「RDF -- リソース表現のフレームワーク」を読んでみます...
・・・なかなか読み応えがありますが、とりあえず、肝は、RDFの名前「Resource Description Framework」が表しているように、抽象的な「リソース」の「説明」を扱う「フレームワーク(枠組み)」であるということのような気がします。
つまり、リソースとしてサイトの要約を扱えば RSSとなり、インストーラに含まれるファイルを扱えば install.rdfということになるのでしょう。RDFはあくまで「フレームワーク」であるので、RSSリーダと、XPIとでは RDFファイルといっても直接の互換性のようなものを期待する性質のものでなく、設計者や開発者が「あぁ RDFで書けばいいんだね。ほいほい」といって使えることを重要視している感じのようです。
# 仮に互換性があって install.rdfが RSSリーダで読めても意味はないと思いますが...(^^;;;;
さらに、「RDFスキーマ -- リソース表現の語彙定義」なんかも読んだりしたのですが、install.rdfについてだけなら、結局のところは、
<Description about="..."> ... </Description>
で、aboutについての説明(情報)を書くという1パターンのみなので、チュートリアルページのようにRDFはスルーして「門前小僧」式に穴埋めでやっても OKで、実際インストーラで欲しい個々の情報を定義した、「http://www.mozilla.org/2004/em-rdf」の名前空間の方が肝要なようです。
で、「em-rdf」の一次ソースにあたってみようと、その URLにアクセスしたら 404でした。orz
まぁ実用上は「Firefox/Thunderbird 用拡張機能のパッケージ方法」あたりの情報を読めばいいんだろうけど。404でいいんか? > Mozilla.org
とりあえず、インストーラはこれぐらいにして、次は Extension本体に踏み込みたいと思います...
ドキュメントアクセス用と動作確認用で、別設定のFirefoxを立ち上げたいので、Profileを複数作成したのですが、どうも別Profileを作成しても同時に起動するのは無理ぽいようです。でも、IEを使うのはやっぱり嫌なので Operaをインストールすることにしました。(^^;;;;;;;;;;;;;;;;;;;;;;;;;;
Operaは、言うまでもなく、京ぽんにとっては魂といっていいソフトなのですが、PC版については、昔、初代 FMV/BIBLO LOOXで AirH" 32kを使ってインターネット接続する環境がメインだったころ、Mozillaの遅さに耐えかねて Version 6あたりを使っていたことがあったものの、途中で Firefox (当時はFirebird)に乗り換えて以降はすっかりご無沙汰になってました。
閑話休題、アーカイブは ring serverでもミラーされているようので、直接 ring serverにアクセスしてダウンロードすることにします...
・・・久しぶりに入れたら、今はバージョンは 8.53だそうで、なんかとっても浦島太郎状態です。(^^;;;;
でも、良く見たら流行にあわせて一見タブブラウザ風になっても、MDIで内部に新規ウィンドウが開けたり、画像を簡単に読み込まないように切り替えることが出来たり、全体をズームで拡大縮小できたり、スタイルシートが変更できたりと、以前 Operaを使っていたときに便利だと思っていたことは、ちゃんと残っている上に、無料版の宿命だった広告枠も無くなっていて、それなりにいい感じに仕上がってはいるようです。
新しいところでは、ユーザーモードのスタイルに疑似テキストブラウザ表示とか、昔の 8ビット時代の PC風のノスタルジアが標準で入っているのが面白いです。(ただ、日本の場合、8ビット時代の PC風なら日本語部分は全部半角カナじゃないと雰囲気出ないのが残念なところですが ^^;;;)
ざっと、遊んだら Firefoxから、ブックマークをインポート、フォントサイズを少し小さめにして、使える環境を設定していきます...
ついでに、このブログの表示が Operaでも問題ないことを確認しておきます。
RSSフィードのアイコン部分に下線が出ています。大した話ではないですが、ちょっと確認すると、spanを aで囲ったとき spanの text-decorationで、aの効果で表示される下線が消えないようです。orz
まぁ spanと aを入れ替えて aのスタイル指定で明示的に text-decoration: noneをすれば問題ないはずなので修正することにします。OK
さて、環境が整ったら、Firefoxの Extension作成の勉強に戻ります...
前回に続き、Firefoxの Extension作成チュートリアルページ拡張の作成 - Firefoxまとめサイトを読んでいきます。
まずチュートリアル用 Extensionである helloworld.xpiを OpenBlockSでダウンロードします。素直にブラウザでダウンロードして転送してもいいのですが、面倒なので URLを「リンクURLをコピー」でコピーして、OpenBlolckSにログインした Poderosa画面で wgetコマンドへの引数としてペーストして直接ダウンロードを実行します。
wget http://extensions.roachfiend.com/helloworld.xpi
チュートリアルにも書いてあるように、このファイルは実は ZIPファイルらしいので、unzipコマンドで展開します。OK
展開したファイルのなかに、さらに helloworld.jarというアーカイブもあるので、これも unzipで展開しておきます...
さて、展開できたら早速圧縮してみます。(^^;;;;;;;
・・・冗談をいっているのではなくて、圧縮しないと Firefoxにインストールして出来ないので、あれこれ弄る前に先に手順を確認しておこうというということです。
幸い Unix系の OSで使えるシェルスクリプトがチュートリアルページの最後の方にあるので、コピーして OpenBlockSで保存しておきます。
具体的な使い方は書かれていないのですが、短いスクリプトなので読むと展開したディレクトリに移動して引数をつけずに実行すると、「ディレクトリ名.xpi」が作成されるようです。作成されたら、ブラウザでアクセス可能なように /var/wwwからシンボリックリンクを貼っておきます。
試しにインストールしてみます。
・・・バージョン1.5.0.1はサポートしていないといわれます。(^^;;;;
手始めにそれを修正してみます。
install.rdfの em:maxVersionが 1.5なのが問題のようなので、1.5.0.9ぐらいにしておきます...
再度圧縮してインストールしてみます...
今度は chromeがどうとかエラーになります...
む、まだほとんど触ってないのにうまくいきません...前途多難な感じです。orz
良くみると、jarファイルの名前が hw.jarになっています。
展開ディレクトリ名を適当に hwとか略して作成してしまったのがいけなかったようです。orz
ディレクトリ名を helloworldに変更してもう一回チャレンジします。
今度は成功です。ちゃんとメニューに 「Hello world!」が追加されています。
しかし、これ動作確認のために Firefoxを再起動するとチュートリアルのドキュメントを開きなおすのが面倒です。こっちは IEで開いておけばいいのかも知れませんが、なんか負けな気がします。(^^;;;;;;
あ、ひょっとしてProfileを変えて立ち上げるのは今な気がしてきました。今までやったことないけど、チャレンジしてみることにします...
京ぽん用Bookmarkletを QRコード化する企画は挫折しましたが、京ぽんでも押さえておきたい URLを QRコードにして転送するのは、かなり便利です。
今は、Firefoxで「リンクURLをコピー」して qr_img.cgiを呼び出すフォームに貼り付けて変換していますが、ちょっと面倒です。もっと簡単に、ワンクリックで出来るようなエクステンションはないでしょうか?
誰でも思いつきそうなネタではあるので、Googleで軽く検索をかけてみます...
・・・それらしいのはヒットしません。
QRコードを自力で生成するのなら難しそうですが、小さなウィンドウを開いてリンク先URLを引数に CGIを呼び出す程度なら Bookmarkletレベルの難易度のような気がします。
・・・自力でトライしてみるか・・・
以前から XULや Firefoxの拡張には興味があったので、これを機会に作成方法を調べてみることにします。
とりあえず、HOWTO系の情報を探します...
翻訳情報のようですが、
拡張の作成 - Firefoxまとめサイトあたりが参考になりそうです。
チュートリアル - Hello Worldといっても結構分量があるのでちょっとメゲそうになるのですが、まぁあれだけ機能を持ったのソフトの拡張である以上、これぐらいの勉強は最低ラインかもしれません。(ふぅ)
文章を読むだけだと眠くなってくるので、適当なところで切り上げて、helloworld.xpiをダウンロードして Hackしてみることにします...(^^;;;;




最近のコメント
森小路による
このブログのアクセス状況は...へのコメント
RxOrcaによる
このブログのアクセス状況は...へのコメント
森小路による
XUL Window初表示へのコメント
最近のコメントを表示...