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
演算子が使えなくなります。
これまで仕様上は許可されていなかったが実際には eval
、parseInt
、Date.parse
などの組み込み関数に対して new
演算子を使えましたが、今後は不可能になります。公式にこの動作がサポートされたことも、広く使われていたこともないものであり、この修正が互換性の問題を起こすことはないはずです。
addEventListener()
の第 3 引数が省略可能になります
addEventListener()
や removeEventListener()
ではこれまで必須とされていた第 3 引数 useCapture
を省略可能になります。
addEventListener()
イベントのバブリングフェーズとキャプチャリングフェーズいずれを対象とするか指定する第 3 引数はこれまで仕様でも Firefox の実装でも必須とされていましたが、WebKit がこれを省略可能としていたため互換性問題が発生していました。そのため Firefox 6 以降の実装および仕様を修正し、useCapture
属性を省略可能とすることになりました。
既存の Firefox 対応ページが動作しなくなることはありませんが、以前仕様に違反していた WebKit でしか動作しなかったコードが Firefox でも動作するようになります。
<canvas>
の width
/height
を 0px
に設定可能になります (7/5 追記)
これまで <canvas>
の width
/heigth
に 0px
は指定できませんでしたが 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
entities
、notations
プロパティ (未実装で常にnull
を返すだけだったが、仕様から削除された)document.domConfig
プロパティ(未サポートだったが、仕様から削除された)document.strictErrorChecking
(未サポートだったが、仕様から削除された)
Accept-Charset
ヘッダを送信しなくなります (8/10 訂正)
Accept-Charset
ヘッダを送信しなくなります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 以降がターゲットになっています。
たれなお :
まだユーザ :
野菜 :