Firefox 8 開発者向けリリースノート
Firefox 8 は 2011 年 11 月 8 日にリリースされました。この記事は、ウェブ開発者とアドオンおよび Mozilla プロジェクト開発者の双方が、このリリースの機能を最大限に活用できるよう支援するための情報を提供します。
ウェブ開発者向けの変更点一覧
>HTML
HTMLImageElementにcrossOriginプロパティが追加され、またcrossorigin属性が<img>要素に追加されました。(参考: Firefox バグ 664299)HTMLSelectElement.add()メソッドの引数に、インデックスが追加されました。インデックスが指す要素の前に、新たな項目が挿入されます。このメソッドはこれまで、項目のみがサポートされていました。(参考: Firefox バグ 666200)HTMLIsIndexElementコンストラクターが削除されました。Firefox 4 以前から、どの要素もこのインターフェイスをインプリメントしていませんでした。- HTML5 のコンテキストメニュー機能 (contextmenu 属性) がサポートされました。この機能によって、要素固有のメニュー項目をネイティブのコンテキストメニューに追加できます。(この機能は HTML5 仕様の変更を待っている関係で、現時点では試験実装という扱いです。参考: バグ 617528)
- すべての要素に
HTMLElement.accessKeyLabel属性がサポートされました。 <input>と<textarea>にselectionDirection属性が追加されました。また、setSelectionRange()メソッドが選択方向を指定できるようになりました。tabindex属性でフォーカス可能になった要素にフォーカスしたとき、ほとんどの要素でフォーカスリングが描画されるようになりました。- 入れ子にされた一連の
<label>要素において、クリックイベントが複数の <label> 要素を起動しなくなりました。これにより、過去に Firefox が応答しなくなる問題が発生していました(Firefox バグ 646157 を参照)。
DOM
insertAdjacentHTMLメソッドが実装されました。BlobBuilderにgetFile()メソッドが追加されました。このメソッドは blob の内容をファイルとして返します。FileReaderSyncインターフェイス(ファイル API の一部)が実装されました。- 入れ子になった
<label>のイベントハンドリングが修正されました。 - ウィンドウ間での
window.postMessage()にFileとFileListが使えるようになりました。 contenteditableな領域において、見出しで改行した際、もしくはリスト編集モードから 2 回改行して抜け出す際、段落が挿入されるようになりました。(これまでは<br>でしたが、これからは<p>が挿入されます。)contenteditableな領域において、1 行目に均等割付を与えたときに適切な処理を妨げるバグを修正しました。contenteditableな領域の最初で delete もしくは backspace を押した際に、前のブロックに影響するバグを修正しました。Document.getSelection()が文字列化ではなく、window.getSelection()と同じSelectionオブジェクトを返すようになりました。- HTML5 の
selectionDirectionプロパティが実装されました。編集可能テキストで選択した方向を指定できます。 HTMLMediaElementのseekableプロパティが実装されました。このプロパティはTimeRangesを返します。HTMLMediaElement.preload属性が適切な列挙値を反映するようになりました。crossOriginプロパティ に不正な値が使われた場合は "Anonymous" と扱われるようになりました。navigator.cookieEnabledが、サイトごとの設定で Cookie の設定が上書きされている場合においても正しい情報を返すようになりました。
JavaScript
- 引数なしで呼び出された
RegExp.exec(),RegExp.test()が文字列 "undefined" にマッチするようになりました。 - 引数なし、もしくは
undefinedをとり呼び出されたString.search(),String.match()が空文字列にマッチするようになり、つまりはすべての文字列にマッチするようになりました。 - ウォッチリストのサポートが行われました。ウォッチリストは (非標準の)
watch()メソッドおよびunwatch()メソッドから利用できます。
CSS
<resolution>が仕様に従い、<integer>だけでなく<number>もサポートしました。hyphens利用時のハイフネーション規則がより多くの言語でサポートされました。background-sizeの処理が仕様により従ったものになりました。- これまで Quriks モードでの
text-decorationは、太い線で描画され、また子孫要素のテキストに沿って描画されていました。Firefox 8 からは、標準モードにより近い表示になります。 - 要素の水平方向への配置がより仕様に沿った実装になりました。この件に関するドキュメントを準備中ですが、今は Firefox バグ 682780 のコメント 23 をお読みください。
- SVG 画像の拡大縮小 が背景画像においても適切に処理されるようになりました。
ネットワーク
WebSocket
WebSocketオブジェクトのsend()メソッドが不適切に論理値を返していた挙動が修正されました。WebSocketオブジェクトのclose()メソッドが現在の標準草案に従ったものになりました。また、クローズイベントが適切にCloseEventインターフェイスを利用するようになりました。WebSocketオブジェクトのextensions属性がサポートされました。- WebSocket コンストラクターがひとつのプロトコル文字列だけではなく、プロトコルの配列もサポートするようになりました。
- WebSocket では混在コンテンツは許可されていません。つまり、保護されたコンテンツから保護されていない WebSocket サーバーへの接続を開くことはできなくなりました。
- WebSocket の接続エラーが
onerrorハンドラーをトリガーするようになりました。 - WebSocket API が最新版の仕様に追従しました。(参考: Firefox バグ 674890, Firefox バグ 674527, Firefox バグ 674716)
- WebSocket の deflate-stream 拡張が無効にされました。この拡張は非推奨とされており、またいくつかのウェブサイトとの互換性を損ねていました。
WebGL
- 他のドメインからのテクスチャ読み込みが再び可能になりました。ただし、CORS によってアクセスを許可されている場合に限ります。(参考: Cross-domain textures)
- Cross-process rendering with Direct2D/Direct3D 10.
MathML
開発者ツール
consoleオブジェクトがdir()メソッドをサポートしました。個のメソッドは指定したオブジェクトについて、インタラクティブなプロパティリストを表示します。
Mozilla 開発者とアドオン開発者向けの変更点
アドオンを Firefox 8 互換にする際に必要となりそうな変更点は Updating add-ons for Firefox 8 にまとめられています。
メモ: Firefox 8 では、従来のメジャーリリースと同様に、バイナリーコンポーネントをコンパイルし直す必要があります。
XPCOM
Components.utils-
特定のコンパートメントでより簡単にオブジェクトを作成できるようにするため、新しいメソッド
Components.utils.createObjectIn()とComponents.utils.makeObjectPropsNormal()が追加されました。
その他の XPCOM 関連の変更
- コンポーネントコードから DOM オブジェクトをインスタンス化する場合、直接
nsIDOMFileをインスタンス化する必要がなくなり、代わりに new File を実行することで DOMFileオブジェクトをインスタンス化できるようになりました。 nsTPtrArray配列型は削除されました。その機能はすべてnsTArrayで利用可能となり、ポインタ型を使用してインスタンス化される場合にSafeElementAt()メソッドを提供します。
ワーカー
ChromeWorkers から XPCOM オブジェクトにアクセスできなくなりました。XPConnect は バグ 649537 によりワーカーコンテキストで無効にされています。
XUL
document.execCommand()のバグが修正されました。このバグは、contentDocumentの値に対して呼び出した際に発生していました。Firefox 3 以降、この操作は正しく動作せずエラーが発生していました。- ブートストラップされたアドオンは、
chrome.manifestファイルを使用して Chrome をロードできるようになりました。 - 最大サイズを指定した場合、XUL 画像の両方向の縮尺比が均等になるようになりました。
ビルドシステムの変更
-
以下のビルド設定オプションは削除されました。
--enable-timeline--disable-storage--necko-disk-cache
-
IDL ファイルをヘッダーにコンパイルする際、必要に応じてヘッダーファイル
jspubtd.hが自動的にインクルードされます。 jsval または [implicit_jscontext] を使用する IDL ファイルにおいて、jspubtd.hやjsapi.hを手動でインクルードする必要はなくなりました。
クロームの登録
- Gecko のバージョン互換性を指定する
platformversionフラグが chrome.manifest でも使えるようになりました。
インターフェイスの変更
mozIJSSubScriptLoader.loadSubScript()メソッドが、可能な場合、起動キャッシュからスクリプトを読み込むようになりました。nsIAccessNodeインターフェイスからownerWindow属性が削除されました。nsIDOMStorageWindowインターフェイスはnsIDOMWindowインターフェイスへ統合されました。nsIDOMWindowInternalインターフェイスの全メンバーがnsIDOMWindowインターフェイスへ移動されました。インターフェイス自体は互換性維持のため Firefox 9 まで (メンバーを持たない状態で) 残されます。- パフォーマンス向上のため、非同期の Places データベース更新に対するコールバック処理が変更されました。新しい
mozIVisitInfoCallback.handleResult()およびmozIVisitInfoCallback.handleError()メソッドを参照してください。これらは、エラーと成功の両方の条件を処理する従来の単一メソッドに代わるものです。 nsIMemoryReporterのKIND_MAPPED属性が廃止され、代わりにKIND_NONHEAP属性と新しい単位型UNITS_COUNT_CUMULATIVE、UNITS_PERCENTAGEが追加されました。nsIMemoryReporterManagerインターフェイスに新しいexplicit属性が追加されました。これは明示的なメモリー割り当ての合計サイズを報告します。nsIMemoryReporterManagerインターフェイスに新しいresident属性が追加されました。これは使用されている物理メモリーの量を報告します。nsINetworkLinkServiceインターフェイスにlinkType属性が追加されました。この属性で使用中のネットワーク接続の種類を参照できます。ただし、今のところすべての OS でLINK_TYPE_UNKNOWNが返ります。Android 対応は、セキュリティの懸念が報告されたため、バックアウトされました。nsISelection2インターフェイスはnsISelectionPrivateインターフェイスへ統合されました。nsISelection3インターフェイスはnsISelectionインターフェイスへ統合されました。nsISessionStartupの属性の状態が、パフォーマンス上の理由から、文字列型ではなくjsval型になりました。nsIDocShellのisActive属性は、最小化されたウィンドウではfalseを返すようになりました。
削除されたインターフェイス
次のインターフェイスは内部で使用されていたもので、必要がなくなったため削除されました。
nsITimelineServicensIDOMHTMLIsIndexElement
nsIWorkerFactory インターフェイスも削除されました。ワーカーは Worker, ChromeWorker コンストラクターから生成可能です。
その他の変更
- ウィンドウが最小化されたとき、最小化から復帰したとき、あるいは全画面表示と通常表示の切り替えが行われたときに、
windowがsizemodechangeイベントを受け取るようになりました。 extensions.autoDisableScopes設定を使う ことで、特定の場所からのアドオン自動インストールを無効化できるようになりました。Documentオブジェクトの新しいmozSyntheticDocumentプロパティを使用すると、文書が完全な標準 DOM 文書ではなく合成文書(つまり、スタンドアロンの画像、動画、音声ファイルなど)であるかどうかを判断できます。例えば、この状況で異なるユーザーインターフェイスを表示したい場合(このケースに応じてコンテキストメニュー項目を異なる方法で追加するなど)に有用です。about:configを開く際にフィルターを指定できるようになりました。例えば、about:config?filter=sessionstoreと入力すると、セッションストレージ関連の設定のみが表示されます。