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

9/27 にリリース予定の Firefox 7 では使用メモリ、起動時間、Firefox Sync、Canvas グラフィックスなどの高速化を中心としてパフォーマンスに目立った改善がなされます。先日ベータ版が公開されましたが、新バージョンの Firefox をリリース前にベータ版で互換性テストされる方のため、前回に引き続き Firefox 7 の後方互換性に関わる変更点をまとめました (他にもあれば随時追記します)。Web 開発者の皆様の参考になれば幸いです。

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

Web コンソールを開く前に呼び出した console.log() も記録されます

これまでは Web コンソールを開く前に呼び出した console.log() メッセージは黙って破棄されていましたが、Firefox 7 からは記録され、Web コンソールを開いたときに確認できるようになります。

以前のバージョンで Web コンソールを常時開いていなければ、デバッグ時に表示されるメッセージが増えることがあります。これはサイトの互換性には影響しない改善点ですが、比較しながら動作検証される方のためここにも明記しておきます。

Function.arity プロパティが削除されます

関数の定義時に明示的に指定した引数の数を表す arity プロパティが削除されます

関数の定義時に指定した名前付き引数の数は Natscape Navigator 4.0 で実装した JavaScript 1.2 では Function.arity として実装されましたが、ECMAScript 標準化に際しては Function.length となりました。後方互換性のため 14 年間 arity プロパティが維持されていましたが、他のブラウザとの互換性と標準準拠のため arity は削除されます。

まだ使っている場合は length プロパティに変更してください。

Image オブジェクトの非標準プロパティ xy が削除されます

これまで Firefox では img 要素の DOM プロパティ xy でページ中の画像の座標を取得できましたが、この非標準プロパティは削除されます

<img> タグによる HTMLImageElement 要素には、その画像の位置座表を表す読み取り専用の xy プロパティが存在しました。しかしこれは他のブラウザでサポートされず、標準にも含められることはありませんでした。これらの非標準プロパティは Firefox 7 で削除されます。

Canvas の図形合成方法から非標準の clearover が廃止されます

Canvas での図形描画時には既存の図形とどのように合成するか globalCompositeOperation で指定できますが、非標準の値 clearover は使用できなくなります。

Canvas で図形を合成する際に既存の図形の上に描くか、下に描くか、重なるところだけ描くかなどは コンテキストオブジェクト (ctx) の globalCompositeOperation で指定できます。Firefox ではこれまで標準が確定する前に実装した clearover をサポートし続けていましたが、標準に含められることはなく、他のブラウザでもほとんどサポートされなかったため、これらの非標準の値は互換性のため廃止されます。

over を使っていた場合は source-over に書き換えてください。clear はほぼ無意味なので使われていないと思いますが、万一使用していた場合は clearRect(0, 0, w, h) などで置き換えてください。

Canvas で影を描画するのは図形合成が source-over である場合に限定されます

Canvas の図形描画時には影を付けることができますが、これはこれまで画像合成方法によらず常に描画されていましたが、既存図形の上に被せて描画する source-over の場合のみ影を描画するようになります

ユースケースとして少なく、実装できているブラウザも少ないことなどから、source-over 以外の場合には影を描画しないということに仕様が最近変更されました。Firefox 7 からは最新仕様に合わせて影を描画するのは globalCompositeOperationsource-over (デフォルト値) である場合に限定されます。

File インターフェイスから非標準のメソッドとプロパティが削除されます

Firefox 7 からは File インターフェイスの非標準メソッド getAsBinary()getAsDataURL()getAsText() と非標準プロパティ fileNamefileSize が削除されます。

Firefox では FileReader の標準化以前に File インターフェイスでファイル内容を読み込む getAsBinary()getAsDataURL()getAsText() メソッドを実装していました。また、ファイル名やサイズは fileNamefileSize プロパティでアクセスできました。

Firefox 3.6 からは標準の FileReader インターフェイスをサポートしており File インターフェイスのメソッド、プロパティは後方互換性のため非推奨な API として残されていましたが、今回他のブラウザとの互換性のために廃止されました。各メソッドを使っていた場合は FileReader インターフェイスを、fileNamefileSize プロパティは標準の namesize プロパティを使うよう変更してください。

Blob データを送信する時の Content-Disposition ヘッダでは filename="blob" になります

FormData.append()Blob データを送信する場合Content-Disposition HTTP ヘッダの filename 値を空文字列ではなく blob として送信するようになります

XMLHttpRequest.send()FormData オブジェクトを渡すことで、ブラウザからサーバにバイナリデータを送信できます。データは FormData.append() の第 2 引数に File または Blob オブジェクトで渡しますが、Blob を使用した場合にはファイル名がないため Firefox 6 までは Content-Disposition HTTP ヘッダ中で filename="" としていました。

Blob オブジェクトの場合に Content-Disposition ヘッダで提案するファイル名が空文字列であるのは本来適切な挙動ですが、Django など一部のライブラリは filename に空文字列が指定された場合に正しく認識できないバグがあることが分かり、Firefox 7 からは filename="blob" という固定値を送信するよう変更されました

Element.dir プロパティが常に小文字で返されるようになります

テキストの表示方向を表す dir プロパティは常に小文字で返されるようになります。

HTML 要素ではその内容の表示方向を dir 属性で指定しますが、element.dir プロパティにアクセスしたときには属性値で大文字が使われている場合でも常に ltr または rtl と小文字の値が返されるようになります。これも仕様に合わせた変更です。

これまで dir を正しく判断するには大文字小文字を揃えて比較していたはずであり、互換性問題が起きることは基本的にありませんが、実際の属性値が必要な場合があれば element.getAttribute("dir") などを使ってください。

document.normalizeDocument() が削除されます

Firefox 7 からは document.normalizeDocument() メソッドが削除されます。

DOM 3 Core では document.normalizeDocument() メソッドが定義されていましたが、機能的には document.normalize() と重複しており他のブラウザでも実装されませんでした。今後 document に対して normalize を行いたい場合は element.normalize() 同様に document.normalize() メソッドを使ってください。

document.createEntityReference() メソッドが削除されます

存在していたが正しく実装されていなかった document.createEntityReference() メソッドが削除されました。

document.createEntityReference() メソッドは 11 年以上存在していましたが正しく実装されておらず、使えませんでした。他のブラウザでも実装が進められなかったためこのメソッドは削除されました。