Firefox 6 for developers

Firefox 6 は Gecko 6.0 ベースのブラウザーで、2011 年 8 月 16 日にリリースされました。このページは Firefox 6 のリリースにあたり、開発者に関係する変更についてまとめたものです。

ウェブ開発者向けの変更点一覧

HTML

  • プログレスバーを表す HTML5 の <progress> 要素がサポートされました。
  • メディア要素にテキストトラックを追加する HTML5 の <track> 要素について、そのパース処理部分が実装されました。要素そのものは実装されていませんが、DOM に現れるようにはなります。
  • border-radius プロパティによって角が丸められたコンテナー内の <iframe> についても、適切に角が丸められるようになりました。
  • <form> 要素の <input> テキストフィールドが XUL の maxwidth プロパティをサポートしなくなりました。これは意図的なものではなく、また HTML 仕様違反でもあります。要素の最大幅を設定するには、size 属性を利用します。
  • <canvas>CanvasRenderingContext2d プロパティ fillStylestrokeStyle はこれまで、妥当な色の指定の後に続く余計なものを無視する処理をしていましたが、適切にエラーとして処理されるように修正されました。たとえば、"red blue" を指定したとき、これまでは "red" と扱われていましたが、これからは指定そのものが無視されます。
  • <canvas> 要素の width と height を適切に 0px と指定できるようになりました。これまではそう指定しても 300px にされていました。
  • HTML カスタムデータ属性 (data-*) がサポートされました。DOM プロパティ element.dataset からデータにアクセスできます。
  • <textarea> 要素がフォーカスされたとき、テキスト挿入箇所が最後ではなく先頭になりました。これにより、他のブラウザーの挙動と一致します。

CSS

-moz-text-decoration-color

このプロパティは text-decoration で指定する underline, overline, strikethrough などの色を指定します。

-moz-text-decoration-line

このプロパティは text-decoration の種類を指定します。

-moz-text-decoration-style

このプロパティは text-decoration で指定する underline, overline, strikethrough などのスタイルを指定します。スタイルには solid, double, dotted, dashed, wavy などがあります。

-moz-hyphens

このプロパティは行送りが発生する際、単語のハイフネーションを制御するプロパティです。

-moz-orient

現在は Mozilla 固有のプロパティで、いくつかの要素 (<progress> 要素など) の縦横の向きを制御します。

::-moz-progress-bar

Mozilla 固有の擬似要素で、<progress> 要素において、完了した部分のスタイルづけを行うためのものです。

その他の変更

  • @-moz-document に新しく regexp() 関数記法が追加されました。これにより、スタイルシートを適用する文書の URL を 正規表現でマッチさせられます。
  • aural 媒体グループのために持っていたコードを削除したため、azimuth CSS プロパティのサポートが廃止されました。このプロパティはちゃんと実装されていなかったため、パッチを当て続けるのではなく未完成の実装を省くほうが理にかなっていると考えました。
  • これまで、:hover 擬似クラスは Quirks モードにおいてクラスセレクターに適用されませんでした。このため .someclass:hover といったコードは動きませんでしたが、この例外が取り払われました。
  • :indeterminate 擬似クラスは <progress> 要素にも適用できます。これは非標準ですが、便利ですので他のブラウザーにも取り入れられて欲しいと考えています。

DOM

コード内でのメディアクエリーの使用

window.matchMedia() メソッドと MediaQueryList インターフェイスによって、メディアクエリーの結果をプログラムから検証できます。

Touch events

Firefox 6 は W3C の標準タッチイベント仕様をサポートします。これにより、タッチスクリーンやトラックパッドなどタッチセンサー式のデバイスでのタッチの解釈が容易になります。

Server-sent events

Server-sent events はサーバーが手元で生成された DOM イベントと同じようにイベントを送出するよう、ウェブアプリケーションが尋ねるための機能です。

  • これまでずっと、空文字列を返すだけだった navigator.securityPolicy プロパティが完全に削除されました。
  • BlobBuilder がサポートされました。現時点では接頭辞付きの実装 (MozBlobBuilder) となっています。
  • document.height, document.width が削除されました。 バグ 585877
  • DocumentType オブジェクトの entities, notations プロパティが削除されました。これは実装されておらず常に null を返しており、また仕様からも削除されていました。
  • DOMConfiguration インターフェイスと、それを使用していた document.domConfig プロパティが削除されました。これらはサポートされておらず、また DOM 仕様からも削除されていました。
  • hashchange イベントが適切に newURL, oldURL フィールド を含むようになりました。
  • FileReader インターフェイスの abort() メソッドが、ファイルの読み込み中に利用された際に例外を投げるようになりました。
  • window.postMessage() メソッドが structured clone algorithm を使用するようになり、あるウィンドウから他のウィンドウに文字列ではなく JavaScript オブジェクトを渡せるようになりました。
  • window.history API が pushState(), replaceState() メソッドに渡されたオブジェクトのシリアライズに structured clone algorithm を使用するようになりました。これによって循環参照などを含むより複雑なオブジェクトも使用可能となりました。
  • 新しく追加された beforeprint, afterprint イベントによって、印刷が行われたときと完了したときを検出する ことができるようになりました。
  • document.strictErrorChecking プロパティが削除されました。実装されておらず、また DOM 仕様からも削除されていました。
  • 標準である event.defaultPrevented プロパティがサポートされました。event.preventDefault() がイベントから呼び出されたかを知る際には、非標準の getPreventdefault() ではなくこちらを使うようにしましょう。
  • window.top プロパティが、適切に readonly となりました。
  • これまでドキュメントのなかった DOM views が削除されました。これらには実装の詳細が多く、また不必要に様々なものを複雑にしていたため削除されました。もしこの変化に気づいた場合は、何か誤ったことをしている可能性があります。
  • EventTarget の関数 addEventListener() に指定する引数 useCapture が optional となりました。これは WebKit の動作とも共通し、また新しい仕様でもそう定義されています。
  • XMLHttpRequest オブジェクトの mozResponseArrayBuffer プロパティが responseType, response プロパティに置き換えられました。
  • HTMLElement インターフェイスに element.dataset プロパティが追加されました。このプロパティにより 要素の data-* グローバル属性 にアクセスできます。
  • CustomEvent インターフェイスが実装されました (バグ 427537)
  • セキュリティの観点から、ユーザーがロケーションバーに data: URI と javascript: URI を入力した時、現在のページのセキュリティコンテキストを受け継がなくなりました。代わりに、新しい空のセキュリティコンテキストが生成されます。これにより、ロケーションバーに入力した javascript: URI から読み込まれたスクリプトは、DOM メソッドなどへのアクセスを持たなくなります。しかし、これらの URI がスクリプトから使用された場合は、これまでと同じように動作します。

JavaScript

  • これまで、いくつかの組み込み関数 (eval, parseInt, Date.parse など) に対し new オペレータを使うことができましたが、仕様においてこれは許されるべきではないとされていました。Firefox 6 では、このサポートが廃止されました。new オペレータのこういった利用は公式にはサポートされておらず、また広く利用されてもいません。この変更が何かに影響することはないでしょう。
  • ECMAScript Harmony の WeakMaps がプロトタイプ実装として追加されました。

SVG

  • pathLength 属性がサポートされました。
  • data: URL から読み込まれたパターン、グラデーション、フィルターが適切に動作するようになりました。

MathML

  • <mstyle> の実装が修正されました。

アクセシビリティ (ARIA)

  • 状態変化イベントが aria-busy の値の変化でも発生するようになりました。
  • aria-sort が発生した際に属性変化イベントが発生するようになりました。

ネットワーク

WebSocket

WebSocket プロトコルのサポートがバージョン 07 に更新されました。また、グローバルオブジェクトのWebSocketオブジェクトがMozWebSocketに改称されました。接頭辞のないオブジェクトの検出を目的としたときに問題となるため、それを防ぐ目的です。

  • Content-Disposition ヘッダーの構文解析が修正され、バックスラッシュでエスケープされた ASCII 文字が適切に文字そのものとして処理されるようになりました。これまではその文字をアンダースコア ("_")に置き換えるという誤った処理がなされていました。
  • Set-Cookie ヘッダーのパスの値において、クォートが適切に処理されるようになりました。これまでクォートを使った場合はそれがデリミタではなく、パスの文字列として認識されていました。**この変更により、いくつかのサイトで互換性の問題が発生する可能性があります。**製作者はコードをチェックすることが望まれます。
  • Upgrade リクエストヘッダーがサポートされました。nsIHttpChannelInternal.HTTPUpgrade() を呼ぶことで、HTTP チャネルから他のプロトコルへのアップグレードをリクエストできます。

その他の変更

  • Microsummary が削除されました。広く使われおらず、また見つけにくい機能でもあり、サポートの継続によって Places (ブックマークと履歴) のアーキテクチャを向上させることが難しくなっていたからです。
  • WebGL が OES_texture_float 拡張をサポートしました。
  • JavaScript コードをテストする簡易で便利なツール Scratchpad が追加されました。

Mozilla 開発者とアドオン開発者向けの変更点

Firefox 6 へアドオンを対応させるために必要な作業の概要は アドオンの Firefox 6 対応 をご覧ください。

メモ: Firefox 6 では、従来のメジャーリリースと同様に、バイナリーコンポーネントをコンパイルし直す必要があります。詳しくは バイナリーインターフェイス をご覧ください。

JavaScript コードモジュール

FileUtils.jsm

  • openSafeFileOutputStream() メソッドは、ファイルを即座に開こうとする代わりに、DEFER_OPEN ビヘイビアフラグ 付きで開くようになりました。

XPCOMUtils.jsm

  • 新しい importRelative() メソッドは、ある JavaScript コードモジュールを、他の JavaScript コードモジュールの相対パスから読み込むようになりました。これによって互いに依存するモジュールを開発しやすくなりました。

XPCOM

クロームからの DOM の使用

クロームコードでの DOM File API の使用

これまでもクロームコード内で DOM File API を使うことは可能でしたが、File コンストラクターをクロームで使用した場合に、ローカルパス名文字列を指定できるようになりました。また、nsIFile オブジェクトを使用して、DOM File API を通じてアクセスするファイルを指定できるようになりました。

インターフェイスの変更

  • nsINavHistoryQueryOptions で、新たな定数 SORT_BY_FRECENCY_ASCENDINGSORT_BY_FRECENCY_DESCENDING を使った訪問頻度順のソートが可能になりました。
  • nsIFilePickeraddToRecentDocs 属性が追加されました。これは、もしユーザーの「最近使用したドキュメント」リストがあれば、そのリストに選択したファイルを追加するよう指定できるものです。この属性はプライベートブラウジングモードでは無視されます。
  • nsINavBookmarkObserver メソッドにアイテム ID 引数を与える場合、GUID も必要となります。
  • nsIPrefBranch.clearUserPref() が、指定された設定が存在しない場合やユーザー設定値がない場合も、例外を投げなくなりました。その代わり、単に何もしなくなりました。
  • nsIMemoryReporter インターフェイスで、調べたいメモリーの種類 (マップ、ヒープ、その他) を指定できるようになりました。
  • nsISHEntrystateData 属性が nsIStructuredCloneContainer を返すようになりました。
  • nsIURIref 属性が追加されました。これは、URI の一部の参照 (「#」以降の部分) を返すものです。また、参照メンバーなしに nsIURI を複製できる cloneIgnoringRef() メソッドと、参照メンバーを無視して他の nsIURI と比較できる equalsExceptRef() メソッドが追加されました。

新しいインターフェイス

mozIAsyncFavicons

ブックマークアイコン (favicon) サービスへの非同期アクセスが可能な新サービスです。

nsIEventSource

詳細は後日解説します。

nsIGSettingsCollection

詳細は後日解説します。

nsIGSettingsService

詳細は後日解説します。

nsIHttpUpgradeListener

nsIHttpChannelInternal.HTTPUpgrade() メソッドを通じた HTTP アップグレード要求を処理するためのコールバックインターフェイスです。

nsIStructuredCloneContainer

構造化された複製アルゴリズム を使ってシリアライズされたオブジェクトのためのコンテナーです。

nsITelemetry

パフォーマンス測定を目的とした 使用統計情報 (Telemetry) を記録とヒストグラムの生成に使用されます。バグ 649502バグ 585196 参照。

nsITimedChannel

バグ 576006 参照。

nsIWebSocketListener

バグ 640003 参照。

nsIWebSocketProtocol

バグ 640003 参照。

削除されたインターフェイス

以下のインターフェイスは、不要となり削除された実装です。詳細はバグを参照してください。

その他の変更

アプリケーションコードからの設定の使用

設定へ簡単にアクセスできる、新しい静的な API が実装されました。これはアプリケーションコードからのみ使用可能であり、アドオンでは使用できません。

参考