Firefox 7 の後方互換性に関わる修正
9/27 にリリース予定の Firefox 7 では使用メモリ、起動時間、Firefox Sync、Canvas グラフィックスなどの高速化を中心としてパフォーマンスに目立った改善がなされます。先日ベータ版が公開されましたが、新バージョンの Firefox をリリース前にベータ版で互換性テストされる方のため、前回に引き続き Firefox 7 の後方互換性に関わる変更点をまとめました (他にもあれば随時追記します)。Web 開発者の皆様の参考になれば幸いです。
ここでは新機能ではなく後方互換性に影響し得る修正のみを説明します。後方互換性に関わるものに限らず、Firefox 7 の主な新機能や変更点については次のページをご覧ください:
- ユーザ向けも含めた新機能: Firefox 7 の主な新機能を紹介します
- 開発者向けの新機能や変更点: Firefox 7 for developers
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
オブジェクトの非標準プロパティ x
、y
が削除されます
これまで Firefox では img
要素の DOM プロパティ x
、y
でページ中の画像の座標を取得できましたが、この非標準プロパティは削除されます。
<img>
タグによる HTMLImageElement
要素には、その画像の位置座表を表す読み取り専用の x
、y
プロパティが存在しました。しかしこれは他のブラウザでサポートされず、標準にも含められることはありませんでした。これらの非標準プロパティは Firefox 7 で削除されます。
Canvas の図形合成方法から非標準の clear
、over
が廃止されます
Canvas での図形描画時には既存の図形とどのように合成するか globalCompositeOperation
で指定できますが、非標準の値 clear
、over
は使用できなくなります。
Canvas で図形を合成する際に既存の図形の上に描くか、下に描くか、重なるところだけ描くかなどは コンテキストオブジェクト (ctx
) の globalCompositeOperation
で指定できます。Firefox ではこれまで標準が確定する前に実装した clear
、over
をサポートし続けていましたが、標準に含められることはなく、他のブラウザでもほとんどサポートされなかったため、これらの非標準の値は互換性のため廃止されます。
over
を使っていた場合は source-over
に書き換えてください。clear
はほぼ無意味なので使われていないと思いますが、万一使用していた場合は clearRect(0, 0, w, h)
などで置き換えてください。
Canvas で影を描画するのは図形合成が source-over
である場合に限定されます
Canvas の図形描画時には影を付けることができますが、これはこれまで画像合成方法によらず常に描画されていましたが、既存図形の上に被せて描画する source-over
の場合のみ影を描画するようになります。
ユースケースとして少なく、実装できているブラウザも少ないことなどから、source-over
以外の場合には影を描画しないということに仕様が最近変更されました。Firefox 7 からは最新仕様に合わせて影を描画するのは globalCompositeOperation
が source-over
(デフォルト値) である場合に限定されます。
File
インターフェイスから非標準のメソッドとプロパティが削除されます
Firefox 7 からは File
インターフェイスの非標準メソッド getAsBinary()
、getAsDataURL()
、getAsText()
と非標準プロパティ fileName
、fileSize
が削除されます。
Firefox では FileReader
の標準化以前に File
インターフェイスでファイル内容を読み込む getAsBinary()
、getAsDataURL()
、getAsText()
メソッドを実装していました。また、ファイル名やサイズは fileName
や fileSize
プロパティでアクセスできました。
Firefox 3.6 からは標準の FileReader
インターフェイスをサポートしており File
インターフェイスのメソッド、プロパティは後方互換性のため非推奨な API として残されていましたが、今回他のブラウザとの互換性のために廃止されました。各メソッドを使っていた場合は FileReader
インターフェイスを、fileName
、fileSize
プロパティは標準の name
、size
プロパティを使うよう変更してください。
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 年以上存在していましたが正しく実装されておらず、使えませんでした。他のブラウザでも実装が進められなかったためこのメソッドは削除されました。