Home > Latest topics

Latest topics > 拡張性や互換性を高く保つ設計とか

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

拡張性や互換性を高く保つ設計とか - Apr 25, 2007

AiO GesturesSplit Browserの連携を試みてみよう、と思って挫折した。基本的にSplit Browserは、Firefoxの初期状態の構造であることを前提にして開発されている拡張機能とは、とても相性が悪い。ハック用のコードを書いてみようと思っても、変更箇所が膨大になりすぎて、とてもやる気が起こらない。FireBugとの連携が結局中途半端な状態で止まってしまってるのもそのせいだ。

Split Browserが連携しやすいのは、Firefox全体に渡ってではなく、tabbrowserというウィジェットに対してだけ拡張を行うように設計されている物だ。マルチプルタブハンドラ情報化タブやなんかは最初からそういう風に設計したので、わりかし簡単に連携がとれるようになった。

たとえば僕の場合は、マルチプルタブハンドラの実装が代表的な例なんだけど、tabbrowserウィジェットに対する拡張はできる限りinitTabBrowser()destroyTabBrowser()というメソッドにまとめておいて、極端な話、tabbrowser要素の動的な増減にも対応できるようにしてある。こういう風な構造になっている拡張機能なら、Split Browser側で簡単に対応できる。実際、マルチプルタブハンドラとの連携のためにSplit Browserに加えたコードは以下の内容だけで済んだ。

if ('MultipleTabService' in window &&
  SplitBrowser.tabbedBrowsingEnabled) {
  var appcontent = document.getElementById('appcontent');
  MultipleTabService.__defineGetter__('browser', function() {
    return SplitBrowser.activeBrowser;
  });
  var initMTS = function(aEvent) {
    MultipleTabService.initTabBrowser(aEvent.originalTarget.browser);
  };
  var destroyMTS = function(aEvent) {
    MultipleTabService.destroyTabBrowser(aEvent.originalTarget.browser);
  };
  appcontent.addEventListener('SubBrowserAdded', initMTS, false);
  appcontent.addEventListener('SubBrowserRemoveRequest', destroyMTS, false);
  window.addEventListener('unload', function() {
    appcontent.removeEventListener('SubBrowserAdded', initMTS, false);
    appcontent.removeEventListener('SubBrowserRemoveRequest', destroyMTS, false);
    window.removeEventListener('unload', arguments.callee, false);
  }, false);
}

まあちゃんとプログラミングの勉強をした人から見たら、これでもまだまだ無駄が多いんだろうとは思うけど……

自分自身がそうなんだけど、他の拡張機能と同時に使われるかもしれない、ってことを敢えて意識していないと、ついついFirefoxべったりの書き方で作ってしまう。その結果、スケーラビリティとかそういうものが低くなってしまって、後で色々と泣きを見ることになる。これは自分にとって一種の保身術でもあると言えるのかもしれない。

分類:Mozilla > XUL, , , , , , 時刻:15:36 | Comments/Trackbacks (0) | Edit

Comments/Trackbacks

TrackBack ping me at


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

Post a comment

writeback message: Ready to post a comment.

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

Powered by blosxom 2.0 + starter kit
Home

カテゴリ一覧

過去の記事

1999.2~2005.8

最近のコメント

最近のつぶやき