Home > Latest topics

Latest topics > FUELが酷すぎる

宣伝1。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。 以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能! シス管系女子って何!? - 「シス管系女子」特設サイト

宣伝2。Firefox Hacks Rebooted発売中。本書の1/3を使って、再起動不要なアドオンの作り方のテクニックや非同期処理の効率のいい書き方などを解説しています。既刊のFirefox 3 Hacks拡張機能開発チュートリアルと併せてどうぞ。

Firefox Hacks Rebooted ―Mozillaテクノロジ徹底活用テクニック
浅井 智也 池田 譲治 小山田 昌史 五味渕 大賀 下田 洋志 寺田 真 松澤 太郎
オライリージャパン

FUELが酷すぎる - Apr 03, 2008

Firefox 3のFUEL、調べれば調べるほど酷さが浮き彫りになってくる。norahさんが「これはひどい」と言ってた意味を! 「心」でッ! 「理解」したッ!! いやもうほんと酷すぎます。XULとJavaScriptとXPCOMが入り乱れてる酷い現状を何とかしようとして作られたはずなのに、それで出てきた物が輪をかけて酷いなんて、悪夢だ……

正直、こんな物の使い方の解説を書くのは犯罪じゃないかって気がするよ。使い方とか誰にも知られないまま、ひっそりと廃れるかひっそりと改善されるのを待つか、どっちかにしたほうがいいって。まじで。

例えばこんな世界を想像してごらん。

var listener = new EventListener();

var reference1 = document.getElementById('item');
reference1.addEventListener('click', listener, false);

var reference2 = document.getElementById('item');
reference2.removeEventListener('click', listener, false); // ここでエラーになる。

alert(reference1 == reference2); // false

これが実際に起こるのがFUELの世界なんだぜ……

実例。
var reference1 = Application.extensions.get('myextension@mydomain');
reference1.storage.set('privateValue', 'someData');

var reference2 = Application.extensions.get('myextension@mydomain');
var val = reference2.storage.get('privateValue', 'defaultData');
alert(val); // says "defaultData"

alert(reference1 == reference2); // false
こんな感じだから、Extensionが持ってるstorageプロパティはセッションストレージとしては全く役立たずです。グローバルなApplication.storageしか使い物にならない。

誤解してた。Extensionとそのsotrageプロパティの場合は問題ないようだ。でもWindowやBrowserTabへのイベントリスナの登録はやっぱり問題あり。こういう風に「どの場合は問題なくて、どの場合は問題ありなのか」が場合によって異なるというのも非常に困る。

もちろんこの状況でも問題を回避する方法はあるけど、その方法の意味を理解するには、処理系の中で何が起こってるかが分かっている必要がある。そういうことが分からなくても気楽に書けるのがLightweightLanguageのいいところなんじゃないのかー!

なお、「回避する方法」というのは例えばこんな感じ。

function EventListener() {
  this.init = function(aTarget) {
    this.target = aTarget;
    this.target.addEventListener('click', this, false);
  };
  this.destroy = function() {
    this.target.removeEventListener('click', this, false);
    this.target = null;
  };
  this.handleEvent = function(aEvent) {
  };
}

var listener = new EventListener(item);
listener.init(document.getElementById('item'));

// 終了間際に実行
listener.destroy();
分類:Mozilla > XUL, , , , , 時刻:12:05 | Comments/Trackbacks (1) | Edit

Comments/Trackbacks

no title

根本的におかしい以前に、肌に合わなさそうで残念です。

jqueryがfirefoxに組み込まれる、みたいなのをWEB+DB PRESSのインタビューで読んで、
そーゆー層が増えていくんだ、と思っていたのですが。

XPCOMまわりが一番つらいのに。

Commented by hot_coffee at 2008/04/04 (Fri) 01:01:47

TrackBack ping me at


の末尾に2014年1月19日時点の日本の首相のファミリーネーム(ローマ字で回答)を繋げて下さい。例えば「noda」なら、「2008-04-03_fuel.trackbacknoda」です。これは機械的なトラックバックスパムを防止するための措置です。

Post a comment

writeback message: Ready to post a comment.

2014年1月19日時点の日本の首相のファミリーネーム(ひらがなで回答)

Powered by blosxom 2.0 + starter kit
Home

カテゴリ一覧

過去の記事

1999.2~2005.8

最近のつぶやき

オススメ

Mozilla Firefox ブラウザ無料ダウンロード