Home > Latest topics

Latest topics > ウィンドウ全体を覆い隠してゴニョゴニョするためのライブラリを作った

Firefox 3 Hacks好評発売中。本書の1/3を占めてしまっている第3章でFUELやらPlacesデータベースのテーブル定義やらJavaScriptコードモジュールやらを解説しています。Software Design 2007年4月号第2特集の再録の拡張機能開発チュートリアルと併せてどうぞ。

Firefox 3 Hacks Mozillaテクノロジ徹底活用テクニック
江村 秀之 池田 譲治 下田 洋志 松澤 太郎 dynamis
オライリージャパン

ウィンドウ全体を覆い隠してゴニョゴニョするためのライブラリを作った - Mar 10, 2008

ツリー型タブでタブバーの表示・非表示を切り替える時の画面のちらつきがUZEEEEEEEEEE!!というのは前々から把握してたんだけど、一時的に画面描画を止めるとかそういうのはJavaScriptのレイヤからは手が出せないっぽいので放置してた。AutoHideではC++あたりでXPCOMコンポーネントを作ってどうにかしてるようだけど、そんなん僕には作れないし。

でもよく考えたらHTML Canvas使って解決できるんじゃね? と思って、そういう物を作ってライブラリ化してみたfullScreenCanvas.show()を呼ぶと、今のウィンドウの表示内容のスクリーンショットを貼り付けたような状態のCanvasがウィンドウ内の要素の最前面に表示されます。画面がチラつくような処理をその下でやって、終わったらfullScreenCanvas.hide()でCanvasを消す、という風にすると、ユーザにイヤンな思いをさせないでいろんな事ができるかも知れない。ブラウズ領域のスクロールバーの部分が描画されないのはどうにもならなかった。

以下、工夫した所。

  • Minefield 3.0b5preではposition:fixedにしてもCanvasがブラウズ領域の描画内用の下に潜り込んでしまう。フレーム(iframe, browser, tabbrowser)があるとそっちの方が上に描画されてしまうようだ。というわけでGecko 1.9の時だけbrowser要素を動的に生成してその中にcanvasを置くようにした。
  • Firefox 2でも、position:fixedを指定したcanvasがブラウズ領域の下に潜り込んでしまう。これは毎回positionプロパティの値を指定し直してやる事でうまく動くようになった。
  • drawWindowは、フレームを含むwindowを指定した場合はサブフレームの中身まで描画するけど、Chrome Windowを指定した場合はbrowser要素やtabbrowser要素で形成されるサブフレームの中身が描画されない。しょうがないので、browser要素やtabbrowser要素を全部収集してループで一つずつ描画するようにした。

XULとCSSのポジショニングの組み合わせは、Gecko 1.9でもバッドノウハウの塊ですね。

Firefox 3のタブにFirefox 2と同じプレースホルダーを復元するライブラリと併せて、MITライセンスでの公開とします。

追記。canvasついでに(意味不明)、タブバーの後ろにcanvasを置いてうそっこ透過タブバーを実現してみた(描画内容が微妙にズレることがあるのは勘弁してください)。これで、ページの閲覧を邪魔されずにタブバーを使えるようになるだろうか?

Comments/Trackbacks

TrackBack ping me at


の末尾に今の日本の首相の名字(ローマ字で回答。ヒント:8文字)を繋げて下さい。例えば「asou」なら、「2008-03-10_fullscreen.trackbackasou」です。これは機械的なトラックバックスパムを防止するための措置です。

Post a comment

writeback message: Ready to post a comment.

今の日本の首相の名字(ひらがなで回答)

Powered by blosxom 2.0 + starter kit
Home

過去の記事

1999.2~2005.8

内容が似ているかもしれない他の人のblog

「あわせて読みたい」によると、ここを見てる人はこのあたりのサイトも見ると面白いかもね、とのことです。

オススメ

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