Firefox 6 の後方互換性に関わる修正

今夜は Firefox 5 のリリースが予定されています。Firefox は新しい高速リリースプロセスへと移行しているため、次の Firefox 6 もスケジュールベースで開発が進められ 7/5 にベータチャンネルへと移行、8/16 に正式リリースとなる予定です (いずれも米国日時)。

前回同様に、後方互換性に関わる Firefox 6 の変更点をまとめています (他にもあれば随時追記します)。リリース前に Beta 版や Aurora ビルドで互換性をテストされる Web 開発者の皆様の参考にしていただければと思います。

ここでは新機能ではなく後方互換性に影響し得る修正のみを説明します。後方互換性に関わるものに限らず、Firefox 6 の主な新機能や変更点については次のページをご覧ください:

https://developer.mozilla.org/ja/Firefox_6_for_developers

Set-Cookie ヘッダ処理のバグが修正されます

Set-Cookie ヘッダの path フィールド値に二重引用符を含む場合の解釈処理が修正されます。

これまで Set-Cookie ヘッダで path を指定するときの値に二重引用符 (") が含まれていた場合、それはリテラルに path 値の一部として解釈されていました。しかし RFC では二重引用符は quoted-string を括るデリミタとして定義されており、Firefox 6 からは仕様通りの解釈を行うように修正されました。

document.width/height が廃止されます

document.width および document.height プロパティは廃止されます。今後は body 要素の width/height スタイルの値を取得してください。

document.width/height プロパティは標準化されず、Opera や IE などのブラウザではサポートされていません。これらのブラウザとの互換性のため、この DOM 0 プロパティのサポートは廃止されます

今後は次のように body 要素に対して getComputedStyle() を使ってください。

var body = document.getElementsByTagName('body')[0];
var width = window.getComputedStyle(body, null).width);

window.top は読み込み専用になります

これまでグローバル変数の top (windows.top) は読み込み専用プロパティではなく、任意の変数を代入できていましたが、Firefox 6 からはエラーになります。

グローバル変数 top (window.top) は window.open() メソッドで開かれるウィンドウ階層の最上位ウィンドウを表すものですが、Firefox 5 まではこれに任意の値を代入できていました (ウィンドウ階層には影響しません)。

他の多くのブラウザでは window.top に任意の値を代入することはできず、次のように誤って var をつけ忘れてコードを書いてしまうと、Firefox だけで動作する互換性問題の生じるコードとなってしまいました。

top = document.body.offsetTop;
top +=5;
myDiv.style.top = top + "px";

そのため Firefox 6 からは window.top は読み込み専用のプロパティとして値を代入できなくなります。

互換モードでも .classname:hover が有効になります

これまで互換モードでは無効だったクラスセレクタに対する :hover 疑似クラスが有効になります。

以前は互換モード (Quirks Mode) では .classname:hover のようにクラスセレクタに :hover 疑似クラスを使ったセレクタは無効化されていました。しかし最近では他のブラウザの Quirks Mode でこの挙動が削除されているため、互換性のため Firefox 6 以降の互換モードでもこの疑似クラスが有効になります

組み込み関数での new は不可能になります

一部の組み込み関数に対して new eval() のように new 演算子が使えなくなります。

これまで仕様上は許可されていなかったが実際には evalparseIntDate.parse などの組み込み関数に対して new 演算子を使えましたが、今後は不可能になります。公式にこの動作がサポートされたことも、広く使われていたこともないものであり、この修正が互換性の問題を起こすことはないはずです。

addEventListener() の第 3 引数が省略可能になります

addEventListener()removeEventListener() ではこれまで必須とされていた第 3 引数 useCapture を省略可能になります。

addEventListener() イベントのバブリングフェーズとキャプチャリングフェーズいずれを対象とするか指定する第 3 引数はこれまで仕様でも Firefox の実装でも必須とされていましたが、WebKit がこれを省略可能としていたため互換性問題が発生していました。そのため Firefox 6 以降の実装および仕様を修正し、useCapture 属性を省略可能とすることになりました。

既存の Firefox 対応ページが動作しなくなることはありませんが、以前仕様に違反していた WebKit でしか動作しなかったコードが Firefox でも動作するようになります。

<canvas>width/height0px に設定可能になります (7/5 追記)

これまで <canvas>width/heigth0px は指定できませんでしたが Firefox 6 からは設定可能になります。

これまでは 0px を指定すると無視されて 300px として処理されていましたが、今後は 0px も設定可能です。

<textarea> フォーカス時のカーソル位置が先頭になります (7/5 追記)

Firefox 6 からは <textarea> にフォーカスしたときのデフォルトカーソル位置が、入力済みのテキストの末尾ではなく先頭になります

他のブラウザとの互換性のため変更されました。カーソルのデフォルト位置に依存しているコードを書いている場合は修正が必要になる可能性があります。

テキストの <input>maxwidth 属性が廃止されます (7/5 追記)

テキストの <input> 要素で入力テキスト長を制限するのに size 属性だけでなく maxwidth も利用できていましたが、今後は size 属性しか使えなくなります。

もともと意図していた挙動ではなく、XUL 要素用の属性が HTML 要素でも有効になってしまっていたという実装上の問題でした。HTML 仕様にも反する挙動であるため maxwidth 属性は廃止されます (もちろん HTML でなく XUL では引き続き使えます)。

使えないのに存在していた属性やプロパティが廃止されます (7/5 追記)

未実装だったり未完成のまま、役に立たないのに存在していた属性やプロパティは、互換性と標準準拠のため廃止されてました。

  • navigator.securityPolicy プロパティ (常に空文字列を返すだけだった)
  • CSS の azimuth プロパティ (未完成のままの実装だったので削除されました)
  • DocumentType オブジェクトの entitiesnotations プロパティ (未実装で常に null を返すだけだったが、仕様から削除された)
  • document.domConfig プロパティ(未サポートだったが、仕様から削除された)
  • document.strictErrorChecking (未サポートだったが、仕様から削除された)

Accept-Charset ヘッダを送信しなくなります (8/10 訂正)

Firefox 6 からは Accept-Charset ヘッダ (日本語版であれば Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7) を送信しなくなります

かつてブラウザがサポートする文字エンコーディングを判断できるように Accept-Charset ヘッダが送信されていましたが、UTF-8 が幅広くサポートされるようになりこのヘッダの必要性はなくなっています。IE8、9 などでも廃止済みで後方互換性の問題も多くなく、ユーザのフィンガープリンティングに利用されるものとなってきているためこのヘッダは送信しなくなります。

訂正: Firefox 6 でこの変更が導入される予定でしたが、yahoo.com に影響があったため Firefox 7 に延期され、更にその後 Firefox 8 以降がターゲットになっています。

3 件のコメント

  1. たれなお :

    何のためにこんなに急いでバージョンの数字をあげるのか?
    使う気がなくなりました。

  2. まだユーザ :

    firefox4リリース後からchromeへの大移動が始まってますね。
    今ユーザが見てるのは、メモリ使用効率とブラウザの反応の良さだけです。
    後が無いと思ったほうがいいですよ。

  3. 野菜 :

    「大改革ver7」への第1歩としてver.6はどのくらいになるのかな?