Firefox 8 for developers
========================

Firefox 8 は 2011 年 11 月 8 日にリリースされました。このページでは、開発者に影響する Firefox 8 の変更点をまとめています。

Web 開発者向けの変更点一覧
---------------

### HTML

* `HTMLImageElement` に `crossOrigin` プロパティが追加され、また `<img>` 要素に `crossorigin` 属性が追加されました。(参考: バグ 664299)
* `HTMLSelectElement.add()` メソッドの引数に、インデックスが追加されました。インデックスが指す要素の前に、新たな項目が挿入されます。このメソッドはこれまで、項目のみがサポートされていました。(参考: バグ 666200)
* `HTMLIsIndexElement` コンストラクタが削除されました。Firefox 4 以前から、どの要素もこのインターフェースをインプリメントしていませんでした。
* HTML5 のコンテキストメニュー機能 (contextmenu 属性) がサポートされました。この機能によって、要素固有のメニュー項目をネイティブのコンテキストメニューに追加できます。(この機能は HTML5 仕様の変更を待っている関係で、現時点では試験実装という扱いです。参考: バグ 617528)
* すべての要素に `accesskeylabel` 属性がサポートされました。
* `<input>` と `<textarea>` に `selectionDirection` アトリビュートが追加されました。また、`setSelectionRange()` メソッドが選択方向を指定できるようになりました。
* `tabindex` 属性でフォーカス可能になった要素にフォーカスしたとき、ほとんどの要素でフォーカスリングが描画されるようになりました。
### DOM

* `insertAdjacentHTML` メソッドが実装されました。
* `BlobBuilder` に `getFile()` メソッドが追加されました。このメソッドは blob の内容をファイルとして返します。
* 入れ子になった `<label>` のイベントハンドリングが修正されました。
* ウィンドウ間での `window.postMessage()` に `File` と `FileList` が使えるようになりました。
* `element.contenteditable` な領域において、見出しで改行した際、もしくはリスト編集モードから 2 回開業して抜け出す際、段落が挿入されるようになりました。(これまでは`<br>`でしたが、これからは`<p>`が挿入されます。)
* `element.contenteditable` な領域において、1 行目に均等割付を与えたときに適切な処理を妨げるバグを修正しました。
* `element.contenteditable` な領域の最初で delete もしくは backspace を押した際に、前のブロックに影響するバグを修正しました。
* `document.getSelection()` が文字列化ではなく、`window.getSelection()` と同じ `Selection` オブジェクトを返すようになりました。
* HTML5 の `selectionDirection` プロパティが実装されました。編集可能テキストで選択した方向を指定できます。
* `HTMLMediaElement` の `seekable` プロパティが実装されました。このプロパティは `TimeRanges` を返します。
* `HTMLMediaElement``.preload` 属性が適切な *enumerated value* を反映するようになりました。
* `crossOrigin` プロパティ に不正な値が使われた場合は "Anonymous" と扱われるようになりました。
* `window.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 からは、標準モードにより近い表示になります。
* 要素の水平方向への配置がより仕様に沿った実装になりました。この件に関するドキュメントを準備中ですが、今は バグ 682780 のコメント 23 をお読みください。
* SVG 画像の拡大縮小 (en-US) が背景画像においても適切に処理されるようになりました。
### Network

* ダブルクォートが RFC 2231/RFC 5987 エンコーディングの区切り子として利用できなくなりました。これはそれらの RFC への準拠によるものです。
* MIME ヘッダフィールドのパーサは、引数に「=」が含まれない `Content-Disposition` ヘッダを受け付けなくなりました。
* JavaScript が無効な環境ではスクリプトファイルをダウンロードしないようになりました。
* SSL 2.0 のサポートが打ち切られました。
### WebSocket

* WebSocket オブジェクトの `send()` (en-US) メソッドが不適切に真偽値を返していた挙動が修正されました。
* `WebSocket` (en-US) オブジェクトの `close()` (en-US) メソッドが現在の標準草案に従ったものになりました。また、クローズイベントが適切に `CloseEvent` (en-US) インターフェースを利用するようになりました。
* The `WebSocket` (en-US) オブジェクトの `extensions` アトリビュートがサポートされました。
* WebSocket コンストラクタがひとつのプロトコル文字列だけではなく、プロトコルの配列もサポートするようになりました。
* SSL と 非 SSL の混在が WebSocket で認められなくなりました。
* WebSocket の接続エラーが `onerror` ハンドラをトリガーするようになりました。
* WebSocket API が最新版の仕様に追従しました。(参考: バグ 674890, バグ 674527, バグ 674716)
* WebSocket の deflate-stream 拡張が無効にされました。この拡張は非推奨とされており、またいくつかの Web サイトとの互換性を損ねていました。
### WebGL

* 他のドメインからのテクスチャ読み込みが再び可能になりました。ただし、CORS によってアクセスを許可されている場合に限ります。(参考: Cross-domain textures)
* Cross-process rendering with Direct2D/Direct3D 10.
### MathML

* `<math>` 要素に `displaystyle` 属性のサポートが追加されました。
* `<mtable>` 要素の `align` において、*負の行数* の解釈が修正されました。
### 開発者ツール

* `console` オブジェクトが `dir()` メソッドをサポートしました。個のメソッドは指定したオブジェクトについて、インタラクティブなプロパティリストを表示します。
Mozilla 開発者とアドオン開発者向けの変更点
-------------------------

アドオンを Firefox 8 互換にする際に必要となりそうな変更点は Updating add-ons for Firefox 8 にまとめられています。

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

### XPCOM

`Components.utils`

特定のコンパートメントでより簡単にオブジェクトを作成できるようにするため、新しいメソッド `createObjectIn()` と `makeObjectPropsNormal()` が追加されました。

#### その他の XPCOM 関連の変更

* You can now instantiate DOM `File` objects from component code by simply doing new File, instead of having to instantiate an `nsIDOMFile` directly.
* The `nsTPtrArray` array type has been removed. Its functionality is now all available on `nsTArray`, which now offers the `SafeElementAt()` method when instantiated using a pointer type. See the section on `SafeElementAt()` in the XPCOM array guide for more information.
### Workers

ChromeWorkers から XPCOM オブジェクトにアクセスできなくなりました。XPConnect は バグ 649537 によりワーカーコンテキストで無効にされています。

### XUL

* A bug in `document.execCommand()` that occurred when calling it on the value of `contentDocument` has been fixed. Since Firefox 3, this resulted in errors instead of working correctly.
* Bootstrapped add-ons can now load chrome using a `chrome.manifest` file. See the section Adding user interface with a chrome.manifest for details.
### JavaScript コードモジュール

#### ISO8601DateUtils.jsm

* このコードモジュールは削除されました。`Date.parse()` が ISO 8601 形式の日付を受け付けるようになり、新しい `Date.toISOString()` (en-US) で ISO 形式の日付と時刻を出力できます。今後は ISO8601DateUtils.jsm の代わりにこれらのメソッドを使ってください。なお、今のところこれらは タイムゾーンに対応していません。
### ビルドシステムの変更

* 以下のビルド設定オプションは削除されました。
    + `--enable-timeline`
    + `--disable-storage`
    + `--necko-disk-cache`
* When compiling IDL files to headers, the header file `jspubtd.h` is automatically included when needed. Manual inclusions of `jspubtd.h` and/or `jsapi.h` in IDL files that use jsval or [implicit\_jscontext] are no longer necessary.
### クロームの登録

* Gecko のバージョン互換性を指定する `platformversion` フラグが chrome.manifest でも使えるようになりました。
### インタフェースの変更

* `mozIJSSubScriptLoader.loadSubScript()` メソッドが、可能な場合、起動キャッシュからスクリプトを読み込むようになりました。
* `nsIAccessNode` インタフェースから `ownerWindow` 属性が削除されました。
* `nsIDOMStorageWindow` インタフェースは `nsIDOMWindow` インタフェースへ統合されました。
* `nsIDOMWindowInternal` インタフェースの全メンバーが `nsIDOMWindow` インタフェースへ移動されました。インタフェース自体は互換性維持のため Firefox 9 まで (メンバーを持たない状態で) 残されます。
* `nsIMemoryReporter` の `KIND_MAPPED` 属性が廃止され、代わりに `KIND_NONHEAP` 属性と新しい単位型 `UNITS_COUNT_CUMULATIVE`、`UNITS_PERCENTAGE` が追加されました。
* `nsINetworkLinkService` インタフェースに `linkType` 属性が追加されました。この属性で使用中のネットワーク接続の種類を参照できます。ただし、今のところすべての OS で `LINK_TYPE_UNKNOWN` が返ります。Android 対応は、セキュリティの懸念が報告されたため、バックアウトされました。
* `nsISelection2` インタフェースは `nsISelectionPrivate` インタフェースへ統合されました。
* `nsISelection3` インタフェースは `nsISelection` インタフェースへ統合されました。
* `nsISessionStartup` の属性の状態が、パフォーマンス上の理由から、文字列型ではなく `jsval` 型になりました。
* `nsIDocShell` の `isActive` 属性は、最小化されたウィンドウでは `false` を返すようになりました。

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

次のインターフェースは内部で使用されていたもので、必要がなくなったため削除されました。

* `nsITimelineService`
* `nsIDOMHTMLIsIndexElement`

`nsIWorkerFactory` インターフェースも削除されました。ワーカーは `Worker`, `ChromeWorker` コンストラクタから生成可能です。

### その他の変更

* ウィンドウが最小化されたとき、最小化から復帰したとき、あるいは全画面表示と通常表示の切り替えが行われたときに、`window` が `sizemodechange` イベントを受け取るようになりました。
* `extensions.autoDisableScopes` 設定を使う (en-US) ことで、特定の場所からのアドオン自動インストールを無効化できるようになりました。
参考
--

* Firefox 7 for developers
* Firefox 6 for developers
* Firefox 5 for developers
* Firefox 4 for developers
* Firefox 3.6 for developers
* Firefox 3.5 for developers
* Firefox 3 for developers
* Firefox 2 for developers
* Firefox 1.5 for developers