Firefox 4 開発者向けリリースノート
Firefox 4 は 2011 年 3 月 22 日にリリースされ、パフォーマンスの向上、HTML5 やその他の進化するウェブ技術への対応強化、セキュリティのさらなる改善を実現しました。この記事では、この次期リリースについてのとっかかりの情報と、ウェブ開発者、アドオン開発者、そして、Gecko プラットフォーム開発者向けに利用可能になる機能の一覧を提供します。
ウェブ開発者向け機能
Gecko は現在 HTML5 パーサーを利用するようになりました。それはバグが修正され、相互運用性が改善され、また、パフォーマンスが向上されたものです。また、HTML マークアップでコンテンツに SVG と MathML を直接埋め込むことも可能にします。
HTML
- ウェブフォーム
-
ウェブフォームの改善の概説。これらの変更点には
<input>要素における入力種類の追加、データ検証などが含まれています。 - HTML5 セクション
-
Gecko は文書におけるセクションに関する新しい HTML5 要素をサポートします。:
<article>、<section>、<nav>、<aside>、<hgroup>、<header>および<footer>。 -
この属性は、すべての要素に共通であり、ウェブページでユーザーに現在は関係しないコンテントを隠すために用いられます。
- その他の HTML5 要素
-
Gecko は次の新しい HTML5 要素もサポートします。:
<mark>、<figure>および<figcaption>。 - WebSocket
-
ウェブアプリケーションとサーバーの間でリアルタイムコミュニケーションを行うための WebSocket API を利用するためのガイド。
キャンバスの改良
以下の変更が CanvasRenderingContext2D インターフェイスに施され、<canvas> の実装が仕様に準拠するよう近づけられました。
arc()を呼び出す際に負の半径を指定すると、正しくINDEX_SIZE_ERR例外が発生するようになりました。createLinearGradient()およびcreateRadialGradient()の呼び出し時に非有限値を指定すると、SYNTAX_ERRではなくNOT_SUPPORTED_ERRが発生するようになりました。miterLimitを負の値に設定しても例外は発生しなくなり、代わりに非正の値は適切に無視されるようになりました。lineWidthを負の値に設定しても例外は発生しなくなり、代わりに非正の値は適切に無視されるようになりました。putImageData()メソッドは、オプションの引数dirtyX、dirtyY、dirtyWidth、dirtyHeightに対応するようになりました。
HTML のその他の変更
<textarea>要素をデフォルトでサイズ変更できるようになりました。これを無効にするためにresizeCSS プロパティが利用できます。canvas.getContextおよびcanvas.toDataURLが認識できない引数を指定して呼び出したときに例外を投げなくなりました。<canvas>要素に Mozilla 固有のmozGetAsFile()メソッドが追加されました。これを用いることで、Canvas の内容である画像を含んだメモリーベースのファイルを保持できます。詳細はHTMLCanvasElementを参照してください。Canvas2DContext.lineCapおよびCanvas2DContext.lineJoinが認識できない値を設定したときに例外を投げなくなりました。Canvas2DContext.globalCompositeOperationが認識できない値を設定したときに例外を投げなくなりました。また、非標準の値darkerをサポートしなくなりました。- 他のブラウザーでは実装されておらず、非推奨 な要素である
<spacer>要素のサポートが無くなりました。 - The
<isindex>要素が、Document.createElement()メソッドによって作成されたときに、 一切プロパティもメソッドも持たない単純な要素として作成されるようになりました。 - Gecko に
<input>要素でのclick()メソッドの呼び出しが追加されました。このメソッドを用いることでファイル選択ダイアログが開けます。ウェブアプリケーションからファイルを利用する の記事内の 例 を参照してください。 <input>要素に新しいmozactionhint属性が追加されました。これを用いることで仮想キーボード上でのエンターキーのラベルを指定できます。<script>要素が<iframe>、<noembed>、<noframes>要素の中でも実行されるようになりました。以前のバージョンの Firefox ではこれらの要素内での実行はされませんでした。これは仕様準拠であり、他のブラウザーの挙動と合致します。
CSS
- CSS 座標変換
-
新しい CSS 座標変換サポートが Firefox 4 で利用できるようになりました。
- CSS での算出値
-
-moz-calcのサポートが追加されました。これを用いることで、<length>の値を数式で指定できます。 - セレクターのグルーピング
-
セレクターをグループ化しコンビネータを分解する
:-moz-anyがサポートされました。 - 背景画像の部分領域のサポート
-
-moz-image-rect()関数を用いることで、画像の一部分の領域 (subrectangle)を背景画像として利用できるようになります。 - CSS touch プロパティ群
-
touch プロパティ群が追加されました。詳細と正式な記事名は後日追記予定です。
- CSS 背景として任意の要素を使用する
-
-moz-elementCSS 関数とdocument.mozSetImageElement()DOM 関数を用いることで、任意の HTML 要素を背景として使用することができます。 - プライバシーと :visited セレクター
-
CSS セレクターを用いた訪問済みリンクのスタイルについて取得できる情報が変更されました。これはいくつかのウェブアプリケーションに影響するかもしれません。
新しい CSS プロパティ
| プロパティ | 説明 |
-moz-font-feature-settings |
OpenType フォントの高度な機能を変更できます。 |
-moz-tab-size |
テキストを描画するときのタブ文字 (U+0009) の幅を空白文字数で指定します。 |
resize |
サイズ変更可能な要素の方向を制御できます。 |
新しい CSS 擬似クラス
| 擬似クラス | 説明 |
:-moz-handler-crashed |
プラグインがクラッシュした要素の表示に用いられます。 |
:-moz-placeholder |
フォームフィールドのガイドテキストに適用されます。 |
:-moz-submit-invalid |
1 つ、もしくは、複数のフォームフィールドの入力が妥当でないときのフォームの送信ボタンに適用されます。 |
:-moz-window-inactive |
アクティブでないウィンドウの要素に適用されます。 |
:invalid |
入力が妥当でない <input> フィールドに自動的に適用されます。
|
:optional |
required 属性を指定していない <input> フィールドに自動的に適用されます。
|
:required |
required 属性を指定した <input> フィールドに自動的に適用されます。
|
:valid |
入力が妥当であると判断された <input> フィールドに自動的に適用されます。
|
新しい CSS 擬似セレクター
| 擬似セレクター | 説明 |
:-moz-focusring |
Gecko がフォーカスインジケーターを描画すべきとしている要素の見え方を指定できます。 |
新しい CSS 関数
| 関数 | 説明 |
:-moz-any |
セレクタのグループ化と結合子の分解をできるようにします。 |
-moz-calc |
<length> の値を数式で指定できます。
|
-moz-element |
任意の要素を background-image および background の背景として使用できます。
|
-moz-image-rect |
画像の一部分を background-image もしくは background で利用できます。
|
改名された CSS プロパティ
| 旧名称 | 新名称 | 備考 |
|---|---|---|
-moz-background-size |
background-size |
-moz-background-size という名称はサポートされません。 |
-moz-border-radius |
border-radius |
旧名称は、サイトを更新するための時間を考慮して、限られた期間サポートされます。描画の変更も仕様の最新版に適合するようになります。 |
-moz-box-shadow |
box-shadow |
小さな CSS の変更
text-shadowプロパティのぼかし範囲が 300 までに制限されるようになりました。これは健全さとパフォーマンスの理由によるものです。overflowプロパティがテーブルグループ要素 (<thead>、<tbody>、および<tfoot>) に適用されなくなりました。-moz-appearanceプロパティが要素に境界のない Aero Glass の見た目を適用する-moz-win-borderless-glass 値をサポートするようになりました。-moz-device-pixel-ratioメディア機能が追加されました。これを用いることで、メディアクエリーで用いられる、CSS ピクセルを基準としたデバイスのピクセル比率を指定できます。- Gecko の CSS
<length>単位の 扱いが他のブラウザーにより良く適合するように、また、絶対的長さをデバイスの DPI を基準にした画面ピクセル数により的確に変換するように修正されました。
グラフィックとビデオ
- WebGL
-
開発中の WebGL 標準が Firefox でサポートされました。
- WebM ビデオのサポート
-
新しいオープンな WebM 動画形式が Gecko2.0 でサポートされます。
- SMIL による SVG アニメーション
-
SVG の SMIL アニメーションのサポートが利用できるようになりました。
- 画像と CSS 背景としての SVG の利用
-
SVG を
<img>要素とともに、また、CSS のbackground-imageで利用することができるようになりました。 - メディア要素での
buffered属性サポート -
<video>および<audio>要素でのbuffered属性がサポートされました。これを用いることでメディアファイルでバッファリングされた範囲が判断可能になります。これをサポートするためにTimeRangesDOM インターフェイスが実装されました。 - メディア要素での
preload属性 -
HTML5 仕様から
preload属性が実装されました。これは以前実装された(そしてもうサポートされない)autobuffer属性を置き換えものです。これは<video>および<audio>要素、同様にnsIDOMHTMLMediaElementインターフェイスを実装した要素で利用できます。 - SVG text 位置指定の改善
-
SVG
<text>and<tspan>要素でx、y、dx、およびdyプロパティの値のためのリストを指定できるようになりました。これを用いることで、文字列中の各文字の位置を個別に制御できます。
DOM
- JavaScript 型付き配列ガイド
-
JavaScript 型付き配列 (typed arrays) のサポートが追加されました。これを用いることで、ネイティブデータ型を用いた生のデータを含むバッファーを扱えます。ファイル API、WebGL、および WebSockets を含む、いくつかの API でこれを用いることができます。
- 範囲の境界領域の保持
-
Rangeオブジェクトにrange.getClientRects()およびrange.getBoundingClientRect()メソッドが追加されました。 - 任意の要素上でのマウスイベントのキャプチャ
-
Internet Explorer 由来の
setCapture()とreleaseCapture()API のサポートが追加されました。Firefox バグ 503943 を参照してください。 - ブラウザー履歴の操作
-
window.historyオブジェクトを通して利用できる、既存のドキュメント履歴オブジェクトが新しい HTML5 のpushState()とreplaceState()メソッドをサポートするようになりました。 MozBeforePaintを用いたアニメーション-
追加された新しいイベントと
window.mozRequestAnimationFrame()メソッドおよびwindow.mozAnimationStartTimeプロパティを組み合わせることで、互いに同期したアニメーションを作成する方法が提供されます。 - タッチイベントとマルチタッチイベント
-
タッチイベントとマルチタッチイベントのサポートが追加されました。
HTML 要素の DOM インターフェイスの変更
いくつかの HTML 要素に関連づけられた DOM インターフェイスが、以下のように、 HTML5 仕様で要求されるひとつのインターフェイスに変更されました。
| Firefox 3.6 でのインターフェイス | Firefox 4 でのインターフェイス | HTML 要素 |
|---|---|---|
HTMLSpanElement |
HTMLElement |
<abbr>, <acronym>, <address>, <b>, <bdo>, <big>, <blink>, <center>, <cite>, <code>, <dd>, <dfn>, <dt>, <em>, <i>, <kbd>, <listing>, <nobr>, <plaintext>, <s>, <samp>, <small>, <strike>, <strong>, <sub>, <sup>, <tt>, <u>, <var>, <xmp> |
HTMLDivElement |
HTMLElement |
<noembed>, <noframes>, <noscript> |
HTMLWBRElement |
HTMLElement |
<wbr> |
小さな DOM の変更
wrapDOM 属性を利用することで、<textarea>要素の折り返しを DOM によってコントロールできるようになりました。バグ 41464Document.createElement()を用いて作成されてドキュメントに追加された<script>要素が、標準で HTML5 仕様に従って動作するようになりました。src属性で指定されたスクリプトは(順番を調整することはせずに)実行可能になりしだい実行され、src属性で指定されていないスクリプトは同期的に実行されます。src属性を持つ挿入されたスクリプトを挿入された順番で実行するには、それらに.async=falseを指定します。- DOM の
Fileオブジェクトがurlプロパティを提供するようになりました。 XMLHttpRequestで FormData がサポートされました。HTMLElement.isContentEditableプロパティが実装されました。Document.currentScriptプロパティを用いることで、現在実行されている<script>要素のスクリプトを判別できます。新しく追加されたbeforescriptexecuteおよびafterscriptexecuteイベントは script 要素の実行前後に発生します。DataTransferオブジェクトにmozSourceNodeプロパティが追加されました。SelectionオブジェクトにSelection.modify()メソッドが追加されました。このメソッドを用いると、ブラウザーウィンドウでの現在のテキスト選択範囲あるいはカーソル位置を簡単に変更できます。window.directoriesオブジェクトとwindow.openのdirectories特性(これらは他のブラウザーではサポートされていません)が 削除されました。代わりにpersonalbarを利用してください。Firefox バグ 474058MouseEvent.mozInputSourceプロパティが DOM ユーザーインターフェイスイベントに追加されました。この非標準プロパティを用いると、イベントを生成したデバイスのタイプを判別できます。Documentのreadystatechangeイベントが実装されました。Document.createElement()メソッドが Quirks モードでタグ名の前後の<と>を受け入れないようになりました。Element.setCapture()およびDocument.releaseCapture()メソッドが追加され、これらを用いることで、指定要素でmousedownイベントが発生した後にマウスが通常の追跡領域を越えても、マウスイベントを追い続けることができます。window.mozPaintCountプロパティが追加されました。これを用いることで、何回ドキュメントが描画されたかを判定できます。これはウェブアプリケーションのパフォーマンスをテストするときに役立ちます。Navigator.appVersionおよびNavigator.userAgentから言語トークンが削除されました。代わりにNavigator.languageもしくはAccept-Languageヘッダーを利用してください。 Firefox バグ 572656XMLHttpRequestオブジェクトに追加された Gecko 固有のmozResponseArrayBufferプロパティを用いると、レスポンスを文字列と同様 に JavaScript 型付き配列として扱えます。- マウスイベントに
mozPressureプロパティが追加されました。このプロパティは圧力感知をサポートする入力デバイスでの圧力を示します。 URL.createObjectURL()およびURL.revokeObjectURL()メソッドを用いることで、ローカルファイルを参照するオブジェクト URL を作成できます。DOMImplementation.createHTMLDocument()メソッドを用いることで、新しい HTML 文書を作成できます。Node.mozMatchesSelector()が指定セレクター文字列が妥当ではない場合に正しくないfalseを返すのではなく、SYNTAX_ERR例外を投げるようになりました。- CSS 同様の省略構文を用いて 要素の SVG プロパティの値を設定できるようになりました。例:
element.style.fill = 'lime'。詳細はstyleを参照してください。 - ドキュメントルートに
privatebrowsingmode属性が追加されました。これはプライベートブラウジングがセッションで一時的であるか永続的であるかの状態を含む、プライベートブラウジングモードの状態を示します。 window.getComputedStyle()メソッドの 2 番目の引数が、他の主なブラウザーと同様に省略可能になりました。- DOM の
StorageEventオブジェクトが仕様の最新版に合致するようになりました。 setTimeout()およびsetTimeout()メソッドの最小遅延時間を設定するための `dom.min_timeout_value が追加されました。MozAfterPaintイベントは、潜在的なセキュリティ問題があるため、デフォルトでは送られなくなりました。設定を変更することで有効にできます。
セキュリティ
- Content Security Policy (CSP)
-
Content Security Policy (CSP) は Mozilla が提案するウェブデザイナーとサーバー管理者がウェブサイトの相互利用でどのようなコンテンツを指定するかの仕様です。目的はクロスサイトスクリプティングを含む攻撃とデータインジェクション攻撃を判定し、軽減することです。
- HTTP Strict Transport Security
-
HTTP Strict Transport Security はウェブサイトがブラウザーに HTTP を用いる代わりに HTTPS を用いてのみやり取りすべきであることを伝えるセキュリティ機能です。
- X-FRAME-OPTIONS レスポンスヘッダー
-
Internet Explorer 8 で導入された X-FRAME-OPTIONS HTTP レスポンスヘッダーが Firefox でサポートされるようになりました。これを用いることでサイトがページをフレーム内で用いることができるかどうか、フレーム内で利用可能ならば、同じドメイン内に限定するかどうかを指示することができます。
- User Agent 文字列 の変更
-
HTTP リクエストで送ったデータとエントロピーの総量を減少させるべきにあるように、 ユーザーエージェント文字列から暗号の強度を表す文字列と言語を表す文字列が削除されました。
JavaScript
JavaScript 1.8.5 で実装される変更の概要については、JavaScript 1.8.5 の新機能 を参照してください。Firefox 4 における JavaScript は ECMASCript 5 標準へのさらなる順守となる予定です。
開発者ツール
- ウェブコンソールの利用
-
ウェブコンソールツールはウェブ開発者および拡張開発者のデバッグ作業の補助に役立ちます。
メモ:
Gecko 2.0 のメモ(Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)エラーコンソールは Firefox 4 からデフォルトで無効化されます。devtools.errorconsole.enabled 設定を true に変更し、ブラウザーを再起動することで再び有効にすることができます。
Mozilla およびアドオン開発者向けの変更
Firefox 4 向けに既存の拡張を更新する上で役立つ Tips は、Updating extensions for Firefox 4 を参照してください。ここでは既存のアドオンの互換性を破壊する主な変更点のいくつかを取り上げているだけです。ですから、上記記事も必ず読んでください。
テーマ開発者であるならば、注意する必要がある重要な変更点を理解するために Theme changes in Firefox 4 を読むべきです。
新しい JavaScript コードモジュール
- Services.jsm
-
Services.jsmコードモジュールは preferences service や window mediator などのよく用いられているサービスへの参照を簡単に取得できるようにするゲッターを提供します。 - JS-ctypes API
-
JS-ctypes API は C 互換外部ライブラリー関数を XPCOM を利用すること無しに呼び出せるようにします。
- Add-ons Manager
-
新しい Add-ons Manager はインストールされたアドオンについての情報の提供、それらの管理のためのサポート、および、アドオンのインストールと削除の方法を提供します。
- PopupNotifications.jsm
-
新しいポップアップ通知モジュールを用いることで簡単に魅力的な非モーダルな通知をユーザーに提供できます。この API の使い方はポップアップ通知の利用で参照できます。
- chrome: URL からコードモジュールを読み込む
-
chrome: URL を用いて JavaScript コードモジュールを読め込むことができるようになりました。JAR ファイルの中でも可能です。
- DownloadLastDir.jsm
-
DownloadLastDir.jsmコードモジュールはgDownloadLastDirグローバル変数を提供します。この変数には最後のダウンロードが行われたディレクトリーのパスを知るために利用可能な文字列が含まれています。このモジュールはプライベートブラウジングに対応しています。 - PerfMeasurement.jsm コードモジュールを用いたパフォーマンスの測定
-
PerfMeasurement.jsmコードモジュールは JavaScript コードにおける CPU レベルでのパフォーマンスデータを測定するための API を提供します。
コードモジュールのその他の変更
NetUtil.jsmコードモジュールがreadInputStreamToString()メソッドを提供するようになりました。これを用いることで、ストリームが null 文字を含んでいても、ストリームから文字列に任意のバイトを読み出せます。- XPCOMUtils.jsm コードモジュールは、XPCOM 列挙子を反復処理するための IterSimpleEnumerator() および IterStringEnumerator() ヘルパーを提供します。
- JavaScript コードモジュール内でワーカーを利用できるようになりました。
DOM の変更
ChromeWorker-
特権コード向けの新しいタイプのワーカーです。これを用いると、拡張およびアプリケーションコードでワーカーから js-ctypes のようなものを用いることができます。
- タッチイベント
-
(非標準の) タッチイベントのサポートが追加されました。これを用いると、タッチスクリーン上で同時に複数の指でトラックできます。
その他の DOM の変更
- 新しい "document-element-inserted" 通知が文書のルート要素の作成時、ただしスクリプトの実行前に送られます。
XUL
Tabbrowser 要素の変更
いくつかの変更が <xul:tabbrowser> 要素になされており、タブ機能の拡張に影響があります。アイコンタブのサポートに加えて、タブバーが標準ツールバーに統合されたという変更もあります。この変更によって、ユーザーがツールバーボタンをそこへドラッグできるようになっています。
TabClose/TabSelect/TabOpenイベントはもはや<xul:tabbrowser>要素 (gBrowser) にバブルアップしません。これらのイベントのためのイベントリスナーは gBrowser 直接ではなく gBrowser.tabContainer に追加すべきです。- タブコンテキストメニューはもはや tabbrowser の無名の子要素ではありません。それゆえ XUL オーバーレイで直接オーバレイできるようになります。
gBrowser.tabContextMenu経由で JavaScript でより直接的にアクセスすることもできます。詳細はこのブログ投稿を参照してください。 - 新たに
visibleTabsプロパティが追加され、これを用いると、現在表示されているタブの配列を取得することができます。このことにより、現在のタブセットでどのタブが表示されているかを知ることができます。これは例えば、Firefox Panorama で利用されています。 - 新たに
showOnlyTheseTabsメソッドが追加されました。これは Firefox Panorama で用いられています。 - 新たに
getIconメソッドが追加されました。これを用いると、<xul:browser>要素から引っ張り出す必要無しに、 タブのファビコンを得ることができます。 - 新たに
tabbrowser.tabsプロパティが追加されました。これを用いると、簡単に<xul:tabbrowser>要素内のタブの一覧を取得できます。 - 新たに
pinTabとunpinTabメソッドが追加されました。これを用いると、タブのアイコン化およびタブのアイコン化の解除ができます(つまり、アイコンタブと通常タブを切り替えます)。 getTabModalPromptBoxメソッドと<xul:tabbrowser>要素のtabmodalPromptShowing属性がタブモーダルアラートのサポートのために追加されました。
ポップアップに対する変更点
<xul:popup>要素がサポートされなくなりました。代わりに<xul:menupopup>要素を使うべきです。(popup要素を用い続けた場合、その要素にはもはや何の特別な意味もないため、不具合に遭遇するでしょう。例えば、<xul:menuseparator>要素は<xul:popup>要素内で用いたときに透明で表示される可能性があります。)<xul:menupopup>XUL 要素にtriggerNodeプロパティが追加されました。このプロパティはポップアップを開くイベントが起こったノードを示します。これはopenPopupメソッドに対するトリガーイベント引数の追加も必要とします。また、anchorNodeプロパティも追加されました。このプロパティはポップアップが作成されたときに指定されたアンカーを返します。<xul:panel>要素にfadeおよびflip属性が追加されました。これらの属性は新しい "arrow" スタイル通知パネルの挙動を設定するために用いられます。
リモート XUL サポートの削除
リモート XUL がサポートされなくなりました。 これは HTTP を経由して供給される XUL ドキュメントにのみ影響します。 また、dom.allow_XUL_XBL_for_file の設定を作成して、その値を true に設定しない限り、file:// URL 形式を用いた XUL 文書の読み込みも行えなくなります。しかしながら、ホワイトリスト機能を用いることで、特定ドメインのリモート XUL を読み込むことを許可できます。
小さな XUL の変更
readonly属性がフィールドで正しく動作するようになりました。<xul:resizer>要素でウィンドウをリサイズする代わりにリサイズする要素を指定できるelement属性を用いることができるようになりました。<xul:resizer>要素にtype属性が追加され、これを用いることで、要素の変わりにウィンドウのリサイズグリップを指定し、ウィンドウのリサイズグリップが 2 度描画されることを防ぐことができます。- "active" 属性は XUL ウィンドウでは設定されません。背景ウィンドウに異なるスタイルを指定するための新しい
:-moz-window-inactive擬似クラスを利用してください。 emptytext属性は非推奨になりました。代わりにplaceholderを用いるべきです。<xul:popup>要素はサポートされません。代わりに<xul:menupopup>を持ちいるべきです。<xul:window>要素がaccelerated属性を提供するようになりました。true の場合、ハードウェアレイヤーマネージャがウィンドウをアクセラレーションすることが許可されます。<xul:stack>要素がbottomとright要素をサポートするようになりました。<xul:tree>要素でのalternatingbackground属性はサポートされません。代わりに:-moz-tree-row擬似クラスを利用できます。- anonid chevronPopup を持っていたブックマークツールバーのオーバーフローボタンは無名になりました。それは PlacesChevron の id を持っています。
<xul:tabs>要素にtabboxプロパティが追加されました。これは古い_tabboxプロパティを置き換えます。古い方のプロパティは非推奨です(そして決してドキュメント化されません)。- XUL
<xul:window>要素にdrawintitlebar属性が追加されました。この値がtrueであれば、ウィンドウのコンテント領域にはタイトルバーが含まれており、タイトルバー内に描画することを許可します。 - 新たに
TabPinnedおよびTabUnpinnedイベントが追加され、これを用いることで、タブがアイコン化したかアイコン化が解除されたかを検知できます。 - 新しい
TabAttrModifiedイベントはタブのlabel、crop、busy、image、あるいは、selected属性のいずれかが変化したときに送られます。 <xul:tab>要素にpinned属性が追加されました。これを用いることで、タブが現在アイコン化されているかどうか判定できます。<xul:tree>要素上のsetDirectionIndicatorクラスは何もしないことがありましたが、一切利用されないようになりました。<xul:window>要素にchromemargin属性が追加され、これを用いることで、ウィンドウの両端の Chrome とコンテントのマージンを設定できます。例えば、タイトルバーに描画するためにこれを用いることができます。<xul:window>要素にdisablechrome属性が追加されました。これはabout:addons のようにブラウザー内 UI に表示するために用いるときにウィンドウで Chrome のほどんどを隠すために用いることができます。<xul:window>要素にdisablefastfind属性が追加されました。これを用いることで、ウィンドウ内のページ内検索バーを無効にできます。このときコンテント内でページ検索バーはサポートされません。例えば、これはアドオンパネルで使われています。- ツールバーをツールボックスの外部に置けるようになりました。
<xul:toolbar>要素のtoolboxidプロパティを設定することで、以前のように<xul:toolbox>要素のメンバーとして扱うことができます。また、<xul:toolbox>要素にexternalToolbarsプロパティが追加されました。このプロパティによって、そのツールボックスのメンバーとして扱われるツールバーのすべての一覧を取得できます。 - デバッグ目的向けに logging XUL テンプレートのロギングのサポートが追加されました。
開発者に影響がある UI の変更
- アドオンバー
-
ステータスバーが削除され、新しいアドオンバーに置き換えられました。以前にステータスバーに UI を追加していた拡張は更新する必要があります。
- ブラウザーのクロームを隠す
-
ブラウザーのクロームを隠したいときに、隠せるようになりました。例えば、
about:addonsがこれを用いています。
Storage
小さなストレージ API の変更
mozIStorageBindingParamsArrayインターフェイスが 配列であるmozIStorageBindingParamsオブジェクトの数を示す length 属性を持つようになりました。mozIStorageStatement.bindParametersが 指定されたmozIStorageBindingParamsArrayが空のときにエラーを返すようになりました。mozIStorageConnection.clone()メソッドが追加されました。これを用いると、存在するデータベース接続を複製できます。mozIStorageConnection.asyncClose()が追加されました。これを用いると、非同期にデータベース接続を閉じることができます。クローズ処理が完了したときに通知されるコールバックを指定します。mozIStorageConnection.setGrowthIncrement()メソッドが追加されました。これを用いると、SQLite のフラグメンテーションを減らすことを助けるために、データベースファイルでの一度の増加量を指定できます。SQLITE_CONSTRAINTエラーがNS_ERROR_FAILUREの代わりにNS_ERROR_STORAGE_CONSTRAINTを報告するようになりました。
XPCOM
以下から参照できる特定の変更に加えて、凍結されたインターフェイスが一切無くなったという重要な変更もあります。すべてのインターフェイスは非凍結となっています。ドキュメンテーションに書いていることに関わらずです。ドキュメンテーションを後ほど更新する予定です。
- Gecko 2.0 における XPCOM の変更
-
Firefox 4 で互換性に影響を与える XPCOM への変更についての詳細。
- Components.utils.getGlobalForObject()
-
この新しいメソッドはオブジェクトが属しているグローバルオブジェクトを返します。これは現在削除された
__parent__ の一般的用途を置き換えます。
Places
- Places クエリーの結果が複数のオブザーバによって提供されるようになり、それらのクエリーは非同期で実行される可能性があります。このことにより、
nsINavHistoryResult、nsINavHistoryQueryOptions、およびnsINavHistoryContainerResultNodeインターフェイスにいくつかの変更があります。より大きな変更は、nsINavHistoryResultViewerインターフェイスがnsINavHistoryResultObserverに改名されたことです。 - いくつかの 新しい通知 が追加されました。この通知を用いると、ブラウザーが Places サービスのシャットダウンプロセスをより確実に追跡できます。これらのうち、ほとんどは内部での利用のためにのみ用意されたものですが、
places-connection-closed通知は Places サービスが自身のシャットダウンプロセスを完了したときを知るために利用可能です。 - いくつかの Places のメソッドで配列サイズ出力を指定する引数がオプションになりました。
<menupopup type="places">のサポートが削除されました。代わりに、以前は自動で行なわれていた Places の情報を持つメニューを手動で作成して配置する必要があります。詳細はメニュービューを用いて Places 情報を表示するを参照してください。
インターフェイスの変更
nsIDocShellおよびnsIWebBrowserインターフェイスに新しくisActive属性が追加されました。これは現在表示されていないドキュメントのためにコードパスを最適化することを許可するために用いることができます。nsIMemoryのメソッドであるisLowMemory()は非推奨になりました。低メモリー状況を監視するには "memory-pressure" 通知 を用いることが推奨されます。- HTTP チャンネル上でリダイレクトを扱う API が非同期で動作できるように変更されました。
nsIChannelEventSink.onChannelRedirect()を用いてリダイレクトを扱う実装を行なっているコードはnsIChannelEventSink.asyncOnChannelRedirectを代わりに用いて更新する必要があります。これはリダイレクトが正常に完了したときに呼び出されるコールバックハンドラーを受け入れます。 nsINavHistoryResultObserver.batching()メソッドが追加されました。このメソッドは Places 操作をバッチにグループ化する方法を提供し、送られてくる更新通知の数を減少させ、その結果、オブザーバが(ビューをリフレッシュするような)相対的にタスクを追加するときのパフォーマンスを向上させます。- 長い間廃止状態であった
nsIPrefインターフェイスがついに削除されました。まだnsIPrefServiceに移行していないなら、今がそのときです。 nsISessionStoreおよびnsISessionStartupインターフェイスがユーザーの要求に応じたセッションリストアのサポートへの変更を受けとるようになりました。nsISessionStore.restoreLastSession()メソッドを参照してください。nsIPrincipalのメソッドであるnsIPrincipal.subsumes()およびnsIPrincipal.checkMayLoad()がorigin、csp、およびURI属性同様に、スクリプトから利用可能になりました。以前はこれらはネイティブコードからのみ利用可能でした。nsIPromptインターフェイスがタブモーダルアラートをサポートするようになりました。詳細はタブモーダルプロンプトの利用を参照してください。nsIEffectiveTLDService.getPublicSuffixFromHost()メソッドがピリオド (".") で始まるホスト名を正しく拒否するようになりました。mozIJSSubScriptLoader.loadSubScript()メソッドには、スクリプトの文字セットを指定できるオプション引数が追加されました。引数が指定されない場合、ASCII が使用されます(従来通り)。nsIAccessProxyインターフェイスは削除されました。これは実装上の詳細であり、その有用性を終えたものです- Firefox Mobile 向けに
nsIContentViewおよびnsIContentViewManagerインターフェイスが追加されました。これはスクロール可能なコンテンツビューを表し、その内容は実際には別のプロセスによって描画されます。 nsIDiskCacheStreamInternalインターフェイスが追加されました。nsIExternalURLHandlerServiceインターフェイスが追加されました。nsISyncJPAKEインターフェイスが追加されました。詳細はFirefox バグ 601645を参照してください。nsIINIParserWriterインターフェイスは、INI ファイルへの書き込みをサポートするために Gecko 1.9.2.4 で追加されました。
メモリー管理
- 確実なメモリーアロケーション
-
Mozilla は null を返さないことを保証する確実なメモリーアロケーターを複数提供するようになりました。この記事を読んでそれらがどのように動作し、どのようにして不確実な、あるいは、確実なメモリーアロケーションを明確に指定して呼び出すのかを学んでください。
その他の変更
- Firefox 内に含まれるリソースのほとんどが単一の JAR アーカイブである
omni.jarにまとめられました。これにより、 I/O が減少し、その結果、起動パフォーマンスが向上しています。詳細は omni.jar についてを読んでください。 accessibility.disablecache設定はサポートされなくなりました。これはデバッグ目的で公開されており、もはや用いられません。- バージョンアップによって GUID が変更になるアドオンが正しく更新されるようになりました。
- プラットフォーム固有のディレクトリーを削除した副作用として、各プラットフォーム向けに異なった設定を提供することができなくなりました。
- デフォルトで、拡張はインストール時に展開されなくなりました。その代わりに XPI ファイルから直接実行されます。拡張は古い挙動を選択するためにインストールマニフェスト内で unpack プロパティを使用できます。バイナリーコンポーネントや、js-ctypes を利用して読み込まれる DLL、検索プラグイン、辞書、ウィンドウアイコンは展開される必要があるように指定しなければなりません。SQLite データベースを生成する拡張や、拡張ディレクトリーからファイルシステムへ相対的に何かをコピーする拡張も、それらのコードを変更する必要があるかもしれません。
- カスタマイズされた Firefox にアプリケーションスタートアップ時に自動でインストールされる拡張を含められるようになりました。
その他の変更
- ルートの chrome.manifest ファイルだけが読み込まれるように
-
ルートの
chrome.manifestファイルだけが読み込まれるようになりました。 2 つ以上のマニフェストファイルを読み込む必要がある場合は、ルートのchrome.manifestでそれらを読み込むためにmanifestコマンドを使用できます。 - Gopher サポートの削除
-
Gopher プロトコルがネイティブでサポートされなくなりました。継続してサポートを受けるには OverbiteFF 拡張を利用できます。
- コンテントプロセスイベントハンドリング
-
out-of-process プラグインのサポートとその他の multiple-process 機能をサポートするために、プロセス間でメッセージを送ることをサポートするための新しい API が導入されました。
- ブートストラップ拡張
-
ブラウザーを再起動せずにインストール、アンインストール、更新(またはダウングレード)できる拡張を作成できるようになりました。
- デフォルトプラグイン の削除
-
デフォルトプラグインが削除されました。アプリケーションプラグインフォルダーもデフォルトで削除されますが、このフォルダー経由でプラグインをインストールするためのサポートはまだ存在します。Firefox バグ 533891 を参照してください。
- Extension Manager の AddonManager への置き換え
-
nsIExtensionManagerは AddonManager に置き換えられました。 - 子 HWND はもはや利用されません
-
Firefox は Windows で内部利用していた 子 HWND を作成しないようになりました。これらの HWND を扱うネィティブコードを用いる拡張を書いていた場合、その拡張は Firefox 4 では動作しないでしょう。HWND を用いることを止めるか、NPAPI プラグインで HWND に依存するコードをラップする必要があります。それは多大な作業であり、HWND を直接用いることを避けられるならば、そうすべきです。
- ジェスチャの変更
-
トラックパッド上の 3 本指の上下スワイプジェスチャが、デフォルトで、Firefox Panorama (旧称 TabCandy) の開閉に変更されました。これらの変更を以前の scroll-to-top および scroll-to-bottom コマンドに戻すには、about:config を開き、
browser.gesture.swipe.downをcmd_scrollBottomにし、browser.gesture.swipe.upをcmd_scrollTopに設定してください。