この日記はMozillaのプロダクトへの貢献者としての私の成果を中心に、気になったバグやWeb界隈の話題について書いていますが、 断り書きがある場合を除き、いかなる団体のオフィシャルな見解ではありません。あくまでも個人的なものです。 Mozilla Foundation、Mozilla Corporation、及び関連企業の公式情報ではないことに注意してください。

現在、XHTML 1.0 (もどき)から、HTML5なコンテンツに修正中です。古い日記は修正が完了していませんので表示が崩れます。 順次、修正していく予定ですのでしばらくお待ちください。

もずはっく日記(2005年7月)

2005年7月7日

Bug 4503 リストボックス等の上にカーソルがある時に、そのスクロールバーが一番下までスクロールしている状態で、マウスのホイールを下方向に回しても、ページ全体が下方向にスクロールしないことがある 初回投稿日時: 2005年07月07日01時20分48秒
最終更新日時: 2005年07月07日01時29分46秒
カテゴリ: Mozilla Core
固定リンク: id=2005070700
SNS: (list)

リストボックスや、ページ内のoverflow:auto;のブロック要素のスクロールバーを一番下までスクロールさせた状態で、その要素の上でマウスのホイールを使って下方向にスクロールしようとしても、その祖先要素(多くの場合、そのページそのもの)がスクロールしなかった問題。

Mozillaはホイールを回した時に、カーソルの下にあるフレーム(nsIFrame)に対して、最初にイベントを伝達する。 そのフレームがその方向にスクロールできない場合は親にイベントを再伝達していく。

このバグが発生している時、そのリストボックス等のフレームが実際にはスクロールできなくなっているのに、twips単位(内部処理用の、ピクセルより細かい疑似画素単位)のオフセットは、まだボックスの高さに対して余裕がある、つまり、スクロール可能だと判断している状態だ。

この原因は単純で、スクロールする時に、スクロールさせる余裕があるかどうかはピクセル単位で判断しているのに、ホイールイベントの発生時にはtwips単位で判断していたためだ。要するに、twips単位で余裕があっても、その余裕が1px分未満だと、実際にはスクロールできない訳だ。そこで、判断時にもtwipsを用いるようにしたのが提出中のパッチである。

Bug 4497 MXTV 番組表の表示不良 (XHTML 違反・コメント不良他) 初回投稿日時: 2005年07月07日01時39分40秒
カテゴリ: XHTML
固定リンク: id=2005070702
SNS: (list)

まだ実際にはソースを見ていないが、コメントしてくれている方のコメント内容を見ていると、かなり非道い状態のようだ。厳格なDTDを利用するのであれば厳格に記述して欲しいものだ。どうせ、最新規格ということでXHTML1.1のDOCTYPEを記述しただけなんだろうが。

Bug 4500 [text/plain] http://www.acs.ne.jp/ のサーバのページが閲覧できない 初回投稿日時: 2005年07月07日01時44分20秒
カテゴリ: HTML
固定リンク: id=2005070703
SNS: (list)

HTMLファイルがtext/plainで送信されているという問題なのだが、普通と違うのが、http://www.acs.ne.jp/%7Eseo/dandei/だと問題あるのに、http://www.acs.ne.jp/%7Eseo/dandei/index.htmlなら問題無いという現象もあることだ。

問題は既に修正されているのだが、後々の資料として原因を知りたい。 問題のサーバはApacheだったが、Apacheでどのように設定すればこのようなことになるのかご存じの方がいたら、是非コメントを追加して欲しい。

2005年7月9日

Nightlyビルドがrenameされた 初回投稿日時: 2005年07月09日00時31分38秒
カテゴリ: Firefox
固定リンク: id=2005070900
SNS: (list)

Nightlyビルドがrenameされ、Deer Park Alpha2になった。 当然、これに伴い、インストール先のフォルダも変更されているので、インストーラビルドを使っているWindowsユーザは、先にDeer Park Alpha1をアンインストールしてからクリーンインストールすることをお勧めする。

Bug 4503 リストボックス等の上にカーソルがある時に、そのスクロールバーが一番下までスクロールしている状態で、マウスのホイールを下方向に回しても、ページ全体が下方向にスクロールしないことがある #2 初回投稿日時: 2005年07月09日03時51分02秒
カテゴリ: Mozilla Core
固定リンク: id=2005070902
SNS: (list)

とりあえず、若干問題が残っているが、挙動の修正は完了した。

2005年7月10日

Bug 4506 UTF-8以外でURLエンコードされたURIのwebページを添付できない #2 初回投稿日時: 2005年07月10日00時18分40秒
カテゴリ: Suite Thunderbird
固定リンク: id=2005071001
SNS: (list)

昨日の問題はデバッグビルドではなく、通常のビルドにすることで回避。何だったのだろう。

とりあえず、UTF-8でのURLデコードに失敗しても、エラーを返さずに、生の(URLエンコードされたままの)URLを返すようにするパッチを作ってみた。

Bug 4508 [FAYT] フレームを使ったページの場合、フレームによってはリンクが疑似フォーカスを受け取らない 初回投稿日時: 2005年07月10日00時21分25秒
カテゴリ: Firefox
固定リンク: id=2005071002
SNS: (list)

どうやら、フレームの上でマウスオーバーのイベントが発生したら問題なくなる模様。原因はnsEventStateManagerのmDocumentが初期化されている、いない、という問題があるようなので、FAYT時には確実に初期化が走るように修正したパッチを投げてみた。

2005年7月11日

Seamonkey 1.0のアイコン & スプラッシュスクリーン 初回投稿日時: 2005年07月11日00時43分04秒
最終更新日時: 2005年07月11日00時55分56秒
カテゴリ: Suite
固定リンク: id=2005071100
SNS: (list)

Seamonkey 1.0のアイコンとスプラッシュスクリーンのスクリーンショット

ノーコメント。

2005年7月15日

Bug 4441 インストーラが古いプロダクトのレジストリを完全に消去できていない 初回投稿日時: 2005年07月15日02時19分19秒
カテゴリ: Suite
固定リンク: id=2005071502
SNS: (list)

Suiteのインストーラのレジストリのゴミ処理問題。修正が完了したので、上書きインストールする時に、直前のレジストリ情報のみ削除するようになった。Firefoxと同様、それより古いインストール情報はアンインストーラで削除する必要がある。

Bug 4286 ファイルの保存ダイアログでショートカットファイルをダブルクリックすると、そのショートカットファイルを上書きしようとする #2 初回投稿日時: 2005年07月15日02時30分24秒
カテゴリ: Mozilla Core
固定リンク: id=2005071504
SNS: (list)

ようやく修正された。

元々、セキュリティホールに関する修正による仕様変更だったので、修正するための再仕様変更は困難を極めたが、最終的な仕様は以下のようになっている。

たいていの場合、ショートカットファイルは、ショートカットファイルとして解釈されるようになった。しかし、セキュリティ問題のために、ダウンロードしようとしたファイルの拡張子が、".lnk"、".pif"、".url"の場合、ショートカットファイルをダウンロードしようとしているので、危険回避のため、ショートカットファイルもただのファイルとして解釈するようになっている。

勘のいい人なら抜け道があることに気づくだろうが、まあ、問題無いのではないかと思う。

Bug 4170 Mac: 日本語の署名ファイルをShift_JISで作成すると文字化けする 初回投稿日時: 2005年07月15日02時38分59秒
カテゴリ: Suite Thunderbird
固定リンク: id=2005071505
SNS: (list)

どうも、署名ファイルがテキストファイルだった場合、その文字コードをOSのファイルシステムの文字コードを利用してデコードするのが問題のようだ。MacOS XではテキストファイルはShift_JISの方が一般的らしいが、ファイルシステムの文字コードにはUTF-8を利用しているらしい。ここに齟齬があるわけだ。

それっぽいパッチを書いてみたが、Macを持っていないのでテストできない。誰かテストして、結果を教えて欲しい。

Bug 4514 [Quirks Mode Only] テキストの装飾(underline overline line-through)の幅を間違うことがある 初回投稿日時: 2005年07月15日02時44分40秒
最終更新日時: 2005年07月15日02時54分42秒
カテゴリ: Mozilla Core
固定リンク: id=2005071506
SNS: (list)

ITmediaを読むときに前々から気になっていた問題。

再現の条件は以下の通り。

  • Quirksモードである
  • 下線の引かれる要素の一部のみを選択している
  • その要素にはletter-spacingword-spacingtext-align: justify;font-variant: small-caps;のうち、最低一つは指定されている(*-spacingは算出値が0以外の場合のみ)

これもパッチを投げてみた。

Googleマップが公開されたけど 初回投稿日時: 2005年07月15日03時44分24秒
最終更新日時: 2005年07月15日03時57分21秒
カテゴリ: News 雑談
固定リンク: id=2005071507
SNS: (list)

一体、いつの地図なんだろうか。徳島県で見る限り、店の情報や道路の開通状況に2年以上の差がある。

大阪府寝屋川市で見てみると、今年2月25日にオープンしたばかりのヤマダ電機が載っている。

地域格差があるんだなぁ。

Bug 1350 リンク先を別ウィンドウで開いたらリンク元の色を更新してほしい 初回投稿日時: 2005年07月15日04時40分13秒
カテゴリ: Mozilla Core
固定リンク: id=2005071508
SNS: (list)

rocからパッチがついに提出された。

パッチの内容を見てみると、なかなか、どうして、長期間放置されていただけあって、広範囲にわたる修正になっている。明日以降、暇を見て勉強してみよう。

ちなみに、rocは有名なバグでは、CSS Multi Columnを実験実装している。また、以前に私もtext-align: justify;の日本語対応や、その他、テキスト関係のバグ修正では多々、お世話になっている。現在はNovellに所属している模様。

2005年7月19日

Branching for Gecko 1.8 初回投稿日時: 2005年07月19日00時22分43秒
カテゴリ: Mozilla Core
固定リンク: id=2005071900
SNS: (list)

まだ、やることが残っているのに、ブランチ(と、それにともなう仕様の固定)されては困るなぁ。

Bug 4515 IFRAMEが2ページ目以降に配置される場合、1ページ目だけ印刷しようとしても2ページ印刷される 初回投稿日時: 2005年07月19日00時27分55秒
カテゴリ: Mozilla Core
固定リンク: id=2005071901
SNS: (list)

ページの範囲を指定して印刷した場合に、その範囲外のIFRAMEやOBJECTが強制的に印刷されてしまっていた問題。

原因は、IFRAMEやOBJECTが含まれる場合に、ページ範囲をチェックしながら印刷しているのに、その後、再びページ範囲をチェックせずに再度印刷処理が走っていたことが原因。提出したパッチは緊急回避的な内容なので、IFRAMEやOBJECTが無い状態で、ドキュメントがサブドキュメントを持つ場合には同じ問題が発生すると考えられるが、その状況があるのか無いのかすらよく分かっていない。ページ範囲を指定して印刷がうまくいかない場合、ぜひBugzilla-jpに報告して欲しい。

2005年7月20日

2005年7月21日

Bug 4492 メニュー項目とアクセスキーの間にスペースが入る 初回投稿日時: 2005年07月21日02時09分28秒
カテゴリ: Firefox Mozilla Core Suite Thunderbird
固定リンク: id=2005072100
SNS: (list)

なんとか修正完了。これは疲れた。

とりあえず日本語版の作成にあたってのblockerバグは無くなったはず。 もし後からそんなものが出てきても対処できないので、問題があったら問題を引き起こしたバグ修正を無効化するしかないだろう。

Bug 4523 Last-ModifiedフィールドがHTTPヘッダに無い場合、document.lastModifiedが文字化けする 初回投稿日時: 2005年07月21日02時13分51秒
カテゴリ: Mozilla Core
固定リンク: id=2005072102
SNS: (list)

dynamisさんからの招集で緊急対応。

バグはBugzilla-jpに報告してくれないと、少なくとも私はその問題があることすら分からない。今回の件はmozillaZine-JPのフォーラムに報告があったようだが、私は時間の都合でここをチェックできていない。(もじら組BBSも忙しい時はNG)

2005年7月23日

Bug 3383 パスにShift_JISで0x7Cを含むファイルからFirefoxを起動できない 初回投稿日時: 2005年07月23日05時07分56秒
最終更新日時: 2005年07月23日05時14分04秒
カテゴリ: Firefox Mozilla Core
固定リンク: id=2005072301
SNS: (list)

ようやく色々と判明。

まずは原因。0x7Cは'|'(pipe)だが、これは本来、URLエンコードする場合にエスケープされるべきものである。しかし、昔のNetscapeブラウザで'|'を':'の代わりに使っていたという歴史があるので、互換性をとるために'|'はファイルパスではエスケープしないようになっている。これは元々、各種ファイルシステムで'|'がパス名に使えないことから問題が無かったことだ。つまり、ローカルファイルをURLエンコードする際に、0x7Cが"%7C"になることはなかった訳だ。

しかし、Firefoxはとても都合の悪いことに、複数のページをホームページに指定する際のURLの区切り文字に'|'を使ってしまった。このため、URLエンコードでエスケープされなかった0x7CでURLが区切られてしまい、ファイルパスが正常に伝わらなくなってしまっている。

解決方法は三種類。そのうち二種類は既に進行中だった。

まず、一つ目の解決方法は、'|'をURLの区切り文字として使わないようにするというもの。これは代わりにスペースを用いるパッチが提案されているが、一向に進展しない。英語圏では大した問題ではないため、このままでは見送りの可能性も出てきた。

二つめの解決方法は、Unicodeパスを利用できるようにするために、ファイルパスのURL化の際にUTF-8でエンコードしようというものだ。パッチも提出されている。しかし、これはとても大きな仕様変更なので、私には1.8のブランチ後にはチェックイン不可能なのではないかと思える。

最後に、今日、提案した解決方法は、非ASCII文字の直後にきた0x7Cはエスケープしてしまう、というものだ。常に0x7Cをエスケープしてしまうと、file:///C|/foo/bar.txtという入力でファイルが開けなくなる副作用を確認したので、非ASCII文字の直後に限定したのだ。これならば問題はないが、'|'がパスとして使われない文字なので、ISO-8859-Xでも問題が無いという綱渡りな仕様ではある。(もっとも、ドライブレターの直後の'|'以外はエスケープされても問題ないのだが、それ以外の部分でエスケープされたり、されなかったりすると気持ち悪いだろう。)

Bug 4408 リンクをクリックするとレイアウトが変更されることがある #2 初回投稿日時: 2005年07月23日05時10分57秒
カテゴリ: Mozilla Core
固定リンク: id=2005072302
SNS: (list)

以前に斉藤さんが修正してくれた問題だが、パフォーマンスに問題が見つかったのでバックアウトされてしまった。Amazon.co.jpで多発する問題なので、これはFirefox1.5では修正されていて欲しい問題だ。

斉藤さんの新たな提案もBorisに蹴られて、新しい提案が今のところ無いので厳しい状況だ。

2005年7月25日

[Well, I'm Back] Gecko 1.9(和訳) 初回投稿日時: 2005年07月25日02時43分47秒
カテゴリ: Mozilla Core
固定リンク: id=2005072500
SNS: (list)

いくつか興味深い話が。

Thebesという名の新しいグラフィックコードが導入される。

これに関しては以前から関係者の話の中でちょくちょく出てきていた話。

更に、sharparrow提供によるイベントのリファクタリングパッチにより、コードをシンプルにし数多くのバグを修正することが出来る。更なるイベントのリファクタリングパッチもその後に続くだろう。

IME関連で、またregressionが出そうで嫌だなぁ。去年もあったし。

IME無効化関係のパッチの予定も狂うかも。

gfxコードの大部分の排除も、大いなる勝利へと結びつくだろう。

これは実現すればありがたい。現在のgfxは必要十分な機能しか無いので、必要となった場合、拡張はとても大変だから。それにしても、主要OS以外のサポートは大丈夫なのだろうか?

2005年7月26日

Bug 4509 Ctrl + Fの検索でも、見つかったリンクにフォーカスを当てるべき(?) 初回投稿日時: 2005年07月26日04時22分45秒
カテゴリ: Firefox
固定リンク: id=2005072600
SNS: (list)

本家でも要望が上がっていたのだが、Ctrl + Fによる、通常の検索でも、リンクを見つけた場合はそれに疑似フォーカスをあわせて、Enterキーのイベントを仲介してはどうだろうかという話。

とりあえず、多くのアプリは検索ダイアログでEnterキーを押すと、Find Againとなることから、ユーザの慣れに合わせて、この変更は行っていない。しかし、通常の検索でもリンクを検索するように変更し、Find Toolbarを閉じたら、見つかっていたリンクにフォーカスを合わせるように修正した。

2005年7月27日

Bug 1241 javascript の document.lastModified はローカライズされて表示されるべき 初回投稿日時: 2005年07月27日23時54分09秒
カテゴリ: Mozilla Core
固定リンク: id=2005072701
SNS: (list)

ローカライズを行うパッチは既に完成して、レビューも完了している。しかし、副作用として、一切、lastModifiedからDateオブジェクトを生成できなくなるので、regressionも発生するし、Webページの作者にも不評を買いそう。

というわけで、プランBとしてlastModifiedの値はローカライズせず(ただし、時間の値は、OSのロケールが日本ならJSTに修正し)、IE6.0と同じ文字列を返すようにして互換性を高めるパッチを新たに作ってみた。

ちなみに、見慣れた表記にするには、DateオブジェクトのtoLocaleStringメソッドで取得することができる。

2005年7月30日

Standards and CSS in IE 初回投稿日時: 2005年07月30日15時25分10秒
最終更新日時: 2005年07月30日15時38分06秒
カテゴリ: IE
固定リンク: id=2005073003
SNS: (list)

以下の項目をIE7ベータで修正したいらしい。

  • HTML 4.01 ABBR tag
  • Improved (though not yet perfect) <object> fallback
  • CSS 2.1 Selector support (child, adjacent, attribute, first-child etc.)
  • CSS 2.1 Fixed positioning
  • Alpha channel in PNG images
  • Fix :hover on all elements
  • Background-attachment: fixed on all elements not just body

abbr要素がようやく、という感じ。 object要素で画像を表示できないのはIEだけだったので(QuickTimeプラグインに邪魔される)、IE7が登場したらIMGタグをいよいよ全廃できそう(個人的には。一般的な話では無いですよ、当然)。 セレクタのサポート改善はついに来たかという感じ。セレクタハックかなんか言う名前で得意げにIEでサポートされていないセレクタを使ってCSS上でブラウザを振り分けていたサイトは大混乱でしょう。こういうのはサーバサイドでUAごとにCSSを動的に出力するように改善されていけば良いのですが。(私はCSSをブラウザのバグを利用して振り分けるのは好きではありません。サーバサイドでやるべきでしょう?)position: fixed;は正直、間に合うのか? という感想。中途半端な実装にならないことのみをひたすら祈ります。アルファチャンネルがPNGでサポートされるというのは既報の通りですね。:hoverが全ての要素で、ということですが、<a name="foo">に関する特別解釈も改善されるのかな?background-attachmentがbody以外にも適用できるようになるとのことですが、スクロールスピードは果たして。これはposition: fixed;にも言えることですが、どれぐらいのパフォーマンスを実現できるのか楽しみです。

とにかく、やっぱり実装できませんでした、というのは無いことを祈ります。でも、これってどのみちWindows2000までのユーザには関係無い話ですよね。

2005年7月31日

私がセレクタハック(?)を嫌う訳 初回投稿日時: 2005年07月31日18時45分31秒
最終更新日時: 2005年07月31日18時46分20秒
カテゴリ: CSS
固定リンク: id=2005073101
SNS: (list)

セレクタハックかなんか言う名前で得意げにIEでサポートされていないセレクタを使ってCSS上でブラウザを振り分けていたサイトは大混乱でしょう。(強調は僕による)という発言から、氏の、この技法のみならず、この技法を使う人のメンタリティそのものに対する嫌悪感が窺える。まあ僕も「裏技」とかいって過剰にありがたがるのはどうかなとも思うわけですけど、「シートまるごと切り替える」ような無駄の多いやり方に比べて、部分的に処理を振り分けることができるというのは、実用性で考えて、やっぱリ非常に魅力的なんですよ。腐ったデジュールスタンダードより便利なデファクトスタンダードに人は流れるものだから、状況を変えるにはデジュールスタンダードをデファクトスタンダードよりも便利なものにするしかない。

私も昔、その手軽さから、使ったことありますし、もうすでに開発が完全に終了したNetscape4.x対策には、link要素のmedia属性のバグ利用なんてのを未だに採用してたりしています。しかし、IEのセレクタハック(?)は、現役のWebブラウザのとあるバグを利用して、別のバグを封じ込めようとするあたりが無茶苦茶なのです。これらのバグには何の関連も無く、ただ単に、特定のバージョンにおいてこれらのバグが共存しているというだけの話です。だから、これをありがたがって使っている人はどうかしてるんじゃないかと思ったりするわけです。

でもPiro君の言うように、その手軽さは分かります。ですから、常に自分(達)で管理し続けているサイトなら合理性と、効果を天秤にかけた場合、決して悪い選択肢でもないとも思います。この事実を利用した合理性は私も評価しています。

ですが、私が納得できないのは、商用サイトで、しかも自社で作成、メンテナンスしていない所(大半でしょう?)がこれを利用している場合です。契約書の妙で納品したサイトに対して制作会社は何の責任も無くなっている場合もあるのでしょうが、人道的にそれはどうなのでしょうか? 何の関連性も無い事柄の偶然性を悪用して商品に利用した商品、私が顧客だったらそれは不良品だと感じます。

もちろん、未来のブラウザに完全対応しろ、と言ってるわけではありません。未来のブラウザのバグでなんらかの問題が発生したら、それは自分でメンテナンスするなり、制作会社に有料で修正してもらうなり、それは当然のことだと思います。

しかし、未来のブラウザで問題が出る可能性が高い作り方をしたものを商品として出すところに、プロ意識の欠如というかそういうものを感じて、憤りを感じるわけです。

実際にそのようなサイト、制作会社がどれぐらいあるのか分かりませんが、Webデザイン関係の雑誌を読んでいるとCSS関連のテクニックで紹介されていることがあるので、(商売でも)利用している人が絶対にいるんじゃないかと思っています。

ちなみに、私もシート丸ごと切り替えなんてのは、効率が悪く、現実的な方法とは思いません。現実的な解決策としては、PHPで一部だけをUA名で出力する・しないを制御するのが一番でしょう。もちろん、固有のブラウザに対してのみ出力する(あるいは、しない)内容は、そのブラウザのバグを抑制するためものに限るべきで、全ての分岐に外れる、つまり未知の(もしくはサイトの制作側が対応しきれなかった)UAでも、それにCSSのバグが全くなかった場合には、制作側の意図通りに表示されるようなシートである必要があります。(つまり、想定外だが理想的なブラウザでそのサイトを見れば、100%意図通りの表示が行われるものを作るべきだということ。)

実際問題、JavascriptなんかでUAごとに分岐処理を作っている大半のサイトはif条件がtrueになった場合の処理ばかりをきちんと書いて、else、つまり未知のブラウザへの処理はおざなりになっている、なんてことが多いので、こういう意識でやってくれる人が少なそうなのは想像できてしまいますが。

余談ですが、私が一番心配しているのは、Microsoftがセレクタを改善してテストしてみると、表示の崩れるサイトが(多く)目について、これはまずい、と判断し、互換性優先で、セレクタの改善を無期限に延期してしまうことです。セレクタの恩恵を一番受けられるページ制作者が、このバカな手法のために自分自身でその進化を止めてしまう可能性も現段階では否定できません。