Firefox 4 for developers

Firefox 4 (6 月後半にベータ版リリースが予定されています)では、パフォーマンスが向上し、 HTML 5 やその他の革新的なウェブ技術のさらなるサポートが追加され、さらには、セキュリティも改善しています。 この記事では、この次期リリースについてのとっかかりの情報と、ウェブ開発者、アドオン開発者、そして、Gecko プラットフォーム開発者向けに利用可能になる機能の一覧を提供します。

これらの機能の多くはすでに Firefox 4 beta リリース、もしくは(冒険心にあふれているなら)ナイトリー trunk ビルド で試すことできます。

メモ: この記事は作成中であり、このページからリンクされている記事もまた同様です。多くの記事名が仮名であり、いくつかのトピックは複数の記事に分割されるかもしれません。

ウェブ開発者向け機能

Gecko は現在 HTML5 パーサーを利用しています。それはバグが修正され、相互運用性が改善され、また、パフォーマンスが向上されたものです。また、HTML マークアップでコンテンツに SVGMathML を直接埋め込むことも可能にします。

HTML

HTML5 パーサー入門

HTML5 パーサーが意味することと、どのように SVG と MathML をコンテンツにインラインで埋め込むかの概説。

HTML5 におけるフォーム

HTML5 におけるウェブフォームの改善の概説。これらの変更点には <input> 要素における入力種類の追加、データバリデーションなどが含まれています。

HTML5 Sections

Gecko は文書におけるセクションに関する新しい HTML5 要素をサポートします。: <article><section><nav><aside><hgroup><header> および <footer>

HTML5 の hidden 属性

この属性は、すべての要素に共通であり、ウェブページでユーザーに現在は関係しないコンテントを隠すために用いられます。

その他の HTML5 要素

Gecko は次の新しい HTML5 要素もサポートします。: <mark><figure> および <figcaption>

WebSocket

ウェブアプリケーションとサーバーの間でリアルタイムコミュニケーションを行うための WebSocket API を利用するためのガイド。

Canvas improvements

The following changes were made to the CanvasRenderingContext2D interface to bring our <canvas> implementation closer to being in line with the specification:

  • Specifying a negative radius when calling arc() now correctly throws an INDEX_SIZE_ERR exception.
  • Specifying non-finite values when calling createLinearGradient() and createRadialGradient() now throws NOT_SUPPORTED_ERR instead of SYNTAX_ERR.
  • Setting miterLimit to a negative value no longer throws an exception; instead, it properly ignores non-positive values.
  • Setting lineWidth to a negative value no longer throws an exception; instead, it properly ignores non-positive values.
  • The putImageData() method now supports the optional parameters dirtyX, dirtyY, dirtyWidth, and dirtyHeight.

小さな HTML の変更

  • <textarea> 要素をデフォルトでサイズ変更できるようになりました。これを無効にするために resize CSS プロパティが利用できます。
  • 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 属性が追加されました。これを用いることで仮想キーボード上でのエンターキーのラベルを指定できます。
  • <iframe><noembed>、および <noframes> 要素内の <script> 要素が実行されるようになりました。以前のバージョンの Firefox ではこれらの要素内での実行はされませんでした。これは仕様準拠であり、他のブラウザーの挙動と合致します。

CSS

CSS transitions

新しい CSS transitions サポートが Firefox 4 では利用できるようになりました。

CSS での算出値

-moz-calc のサポートが追加されました。これを用いることで、<length> の値を数式で指定できます。

セレクターのグルーピング

セレクターをグループ化しコンビネータを分解する :-moz-any がサポートされました。

背景画像の部分領域のサポート

-moz-image-rect 関数を用いることで、画像の一部分の領域 (subrectangle)を背景画像として利用できるようになります。

CSS touch プロパティ群

touch プロパティ群が追加されました。詳細と正式な記事名は後日追記予定です。

CSS 背景として任意の要素を使用する

-moz-element CSS 関数と 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 メディア機能が追加されました。これを用いることで、Media Query で用いられる、CSS ピクセルを基準としたデバイスのピクセル比率を指定できます。
  • Gecko の CSS 単位の 扱いが他のブラウザーにより良く適合するように、また、絶対的長さをデバイスの DPI を基準にした画面ピクセル数により的確に変換するように修正されました。

グラフィックとビデオ

WebGL

開発中の WebGL 標準が Firefox でサポートされました。

グラフィックパフォーマンスの最適化

Firefox 4 でグラフィックとビデオのパフォーマンスを最大限引き出すための Tips & Tricks。

WebM ビデオのサポート

新しいオープンな WebM ビデオフォーマットが Gecko2.0 でサポートされます。このサポートは 6 月 9 日以降のナイトリーに含まれています。

SMIL による SVG アニメーション

SVG の SMIL アニメーションのサポートが利用できるようになりました。バグ 482402 を参照してください。

画像と CSS 背景としての SVG の利用

SVG を <img> 要素とともに、また、CSS の background-image で利用することができるようになりました。

メディア要素での buffered 属性サポート

<video> および <audio> 要素での buffered 属性がサポートされました。これを用いることでメディアファイルでバッファリングされた範囲が判断可能になります。これをサポートするために TimeRanges DOM インターフェイスが実装されました。

メディア要素での preload 属性

HTML5 仕様から preload 属性が実装されました。これは以前実装された(そしてもうサポートされない)autobuffer 属性を置き換えものです。これは <video> および <audio> 要素、同様にnsIDOMHTMLMediaElement インターフェイスを実装した要素で利用できます。

SVG text 位置指定の改善

SVG <text> and <tspan> 要素で xydx、および dy プロパティの値のためのリストを指定できるようになりました。これを用いることで、文字列中の各文字の位置を個別に制御できます。

DOM

JavaScript 型付き配列

JavaScript 型付き配列 (typed arrays) のサポートが追加されました。これを用いることで、ネイティブデータ型を用いた生のデータを含むバッファーを扱えます。 File APIWebGL、および WebSockets を含む、いくつかの API でこれを用いることができます。

範囲の境界領域の保持

Range オブジェクトに range.getClientRects() および range.getBoundingClientRect() メソッドが追加されました。

任意の要素上でのマウスイベントのキャプチャ

Internet Explorer 由来の setCapture()releaseCapture()API のサポートが追加されました。バグ 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 の変更

  • wrap DOM 属性を利用することで、<textarea> 要素の折り返しをDOM によってコントロールできるようになりました。バグ 41464
  • document.createElement() を用いて作成されてドキュメントに追加された <script> 要素が、標準で HTML5 仕様に従って動作するようになりました。 src 属性で指定されたスクリプトは(順番を調整することはせずに)実行可能になりしだい実行され、src 属性で指定されていないスクリプトは同期的に実行されます。src 属性を持つ挿入されたスクリプトを挿入された順番で実行するには、それらに .async=false を指定します。
  • DOM の file オブジェクトが url プロパティを提供するようになりました。
  • DOM の file オブジェクトに新しく click() メソッドが追加されました。
  • XMLHttpRequest で FormData がサポートされました。
  • element.isContentEditable プロパティが実装されました。
  • document.currentScript プロパティを用いることで、現在実行されている <script> 要素のスクリプトを判別できます。新しく追加された element.onbeforescriptexecute および element.onafterscriptexecute イベントは script 要素の実行前後に発生します。
  • DragTransfer オブジェクトに mozSourceNode プロパティが追加されました。
  • Selection オブジェクトに selection.modify() メソッドが追加されました。このメソッドを用いると、ブラウザーウィンドウでの現在のテキスト選択範囲あるいはカーソル位置を簡単に変更できます。
  • window.directories オブジェクトと window.opendirectories 特性(これらは他のブラウザーではサポートされていません)が 削除されました。代わりに personalbar を利用してください。バグ 474058
  • event.mozInputSource プロパティが DOM ユーザーインターフェイスイベントに追加されました。この非標準プロパティを用いると、イベントを生成したデバイスのタイプを判別できます。
  • document.onreadystatechange イベントが実装されました。
  • document.createElement メソッドが Quirks モードでタグ名の前後の <> を受け入れないようになりました。
  • element.setCapture() およびdocument.releaseCapture() メソッドが追加され、これらを用いることで、指定要素で mousedown イベントが発生した後にマウスが通常の追跡領域を越えても、マウスイベントを追い続けることができます。
  • The window.mozPaintCount プロパティが追加されました。これを用いることで、何回ドキュメントが描画されたかを判定できます。これはウェブアプリケーションのパフォーマンスをテストするときに役立ちます。
  • window.navigator.appVersion および window.navigator.userAgent から言語トークンが削除されました。代わりに window.navigator.language もしくは Accept-Language ヘッダー を利用してください。 バグ 572656
  • XMLHttpRequest オブジェクトに追加された Gecko 固有の mozResponseArrayBufferプロパティを用いると、レスポンスを文字列と同様 に JavaScript Typed Array として扱えます。
  • Mouse イベントmozPressure プロパティが追加されました。このプロパティは圧力感知をサポートする入力デバイスでの圧力を示します。
  • ~~window.createBlobURL()~~ window.URL.createObjectURL() および window.URL.revokeObjectURL() メソッドを用いることで、ローカルファイルを参照する BLOB ("Binary Large OBject") URL を作成できます。
  • DOMImplementation.createHTMLDocument() メソッドを用いることで、新しい HTML 文書を作成できます。
  • Node.mozMatchesSelector() が指定セレクター文字列が妥当ではない場合に正しくない false を返すのではなく、SYNTAX_ERR 例外を投げるようになりました。
  • CSS 同様の省略構文を用いて 要素の SVG プロパティの値を設定できるようになりました。例: element.style.fill = 'lime'。詳細は element.style を参照してください。
  • ドキュメントルートに privatebrowsingmode 属性 が追加されました。これはプライベートブラウジングがセッションで一時的であるか永続的であるかの状態を含む、プライベートブラウジングモードの状態を示します。
  • window.getComputedStyle() メソッドの 2 番目の引数が、他の主なブラウザーと同様に省略可能になりました。
  • DOM の StorageEvent オブジェクトが仕様の最新版に合致するようになりました。
  • window.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 を提供します。

小さなコードモジュールの変更

DOM の変更

ChromeWorker

特権コード向けの新しいタイプの Worker です。これを用いると、拡張およびアプリケーションコードで Worker から js-ctypes のようなものを用いることができます。

タッチイベント

(非標準の) タッチイベントのサポートが追加されました。これを用いると、タッチスクリーン上で同時に複数の指でトラックできます。

XUL

Tabbrowser (gBrowser) の変更

いくつかの変更が <tabbrowser> 要素になされており、タブ機能の拡張に影響があります。アイコンタブのサポートに加えて、タブバーが標準ツールバーに統合されたという変更もあります。この変更によって、ユーザーがツールバーボタンをそこへドラッグできるようになっています。

  • TabClose/TabSelect/TabOpen イベントはもはや tabbrowser 要素 (gBrowser) にバブルアップしません。これらのイベントのためのイベントリスナーは gBrowser 直接ではなく gBrowser.tabContainer に追加すべきです。
  • タブコンテキストメニューはもはや tabbrowser の無名の子要素ではありません。それゆえ XUL オーバーレイで直接オーバレイできるようになります。gBrowser.tabContextMenu 経由で JavaScript でより直接的にアクセスすることもできます。詳細はこのブログ投稿を参照してください。
  • 新たに visibleTabs プロパティが追加され、これを用いると、現在表示されているタブの配列を取得することができます。このことにより、現在のタブセットでどのタブが表示されているかを知ることができます。これは例えば、Firefox Panorama で利用されています。
  • 新たに showOnlyTheseTabs メソッドが追加されました。これは Firefox Panorama で用いられています。
  • 新たに getIcon メソッドが追加されました。これを用いると、<xul:browser> 要素から引っ張り出す必要無しに、 タブのファビコンを得ることができます。
  • 新たに tabbrowser.tabs プロパティが追加されました。これを用いると、簡単に <xul:tabbrowser> 要素内のタブの一覧を取得できます。
  • 新たに pinTabunpinTab メソッドが追加されました。これを用いると、タブのアイコン化およびタブのアイコン化の解除ができます(つまり、アイコンタブと通常タブを切り替えます)。
  • 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 を読み込むことを許可できます。Remote XUL Manager 拡張 を用いると、このホワイトリストを管理できます。

小さな 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> 要素が bottomright 要素をサポートするようになりました。
  • <xul:tree> 要素での alternatingbackground 属性はサポートされません。代わりに :-moz-tree-row 擬似クラスを利用できます。
  • anonid chevronPopup を持っていたブックマークツールバーのオーバーフローボタンは無名になりました。それは PlacesChevron の id を持っています。
  • <xul:tabs> 要素に tabbox プロパティが追加されました。これは古い _tabbox プロパティを置き換えます。古い方のプロパティは非推奨です(そして決してドキュメント化されません)。
  • XUL <xul:window> 要素に drawintitlebar 属性が追加されました。この値が true であれば、ウィンドウのコンテント領域にはタイトルバーが含まれており、タイトルバー内に描画することを許可します。
  • 新たに TabPinned および TabUnpinned イベントが追加され、これを用いることで、タブがアイコン化したかアイコン化が解除されたかを検知できます
  • 新しい TabAttrModified イベント はタブの labelcropbusyimage、あるいは、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 クエリーの結果が複数のオブザーバによって提供されるようになり、それらのクエリーは非同期で実行される可能性があります。このことにより、nsINavHistoryResultnsINavHistoryQueryOptions、および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()origincsp、 および URI 属性同様に、スクリプトから利用可能になりました。以前はこれらはネイティブコードからのみ利用可能でした。
  • nsIPrompt インターフェイスがタブモーダルアラートをサポートするようになりました。詳細はタブモーダルプロンプトの利用を参照してください。
  • nsIEffectiveTLDService.getPublicSuffixFromHost() メソッドがピリオド (".") で始まるホスト名を正しく拒否するようになりました。

メモリー管理

確実なメモリーアロケーション

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 が導入されました。

ブートストラップ拡張

ブラウザーを再起動せずにインストール、アンインストール、更新(またはダウングレード)できる拡張を作成できるようになりました。

デフォルトプラグイン の削除

デフォルトプラグインが削除されました。アプリケーションプラグインフォルダーもデフォルトで削除されますが、このフォルダー経由でプラグインをインストールするためのサポートはまだ存在します。bug 533891 を参照してください。

Extension Manager の AddonManager への置き換え

nsIExtensionManagerAddonManager に置き換えられました。 指定した拡張 ID からインストール場所を取得するための方法は現在のところ存在しないと思われるので、それに最も近い回避策はプロファイルディレクトリーを見つけるためにディレクトリーサービスを用い、それに "extensions" を追加することです(この手段ではプロファイルディレクトリー外あるいは他の位置にエイリアスされている拡張は取得できません)。

子 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.downcmd_scrollBottom にし、browser.gesture.swipe.upcmd_scrollTop に設定してください。

関連情報