Firefox 4 for developers
Firefox 4 (6 月後半にベータ版リリースが予定されています)では、パフォーマンスが向上し、 HTML 5 やその他の革新的な Web 技術のさらなるサポートが追加され、さらには、セキュリティも改善しています。 この記事では、この次期リリースについてのとっかかりの情報と、 Web 開発者、アドオン開発者、そして、Gecko プラットフォーム開発者向けに利用可能になる機能の一覧を提供します。
これらの機能の多くはすでに Firefox 4 beta リリース、もしくは(冒険心にあふれているなら)ナイトリー trunk ビルド で試すことできます。
メモ: この記事は作成中であり、このページからリンクされている記事もまた同様です。多くの記事名が仮名であり、いくつかのトピックは複数の記事に分割されるかもしれません。
Web 開発者向け機能
HTML
- HTML5 パーサー入門 (en-US)
-
HTML5 パーサーが意味することと、どのように SVG と MathML をコンテンツにインラインで埋め込むかの概説。
- HTML5 におけるフォーム
-
HTML5 における Web フォームの改善の概説。これらの変更点には
<input>要素における入力種類の追加、データバリデーションなどが含まれています。 - HTML5 Sections
-
Gecko は文書におけるセクションに関する新しい HTML5 要素をサポートします。:
<article>、<section>、<nav>、<aside>、<hgroup>、<header>および<footer>。 -
この属性は、すべての要素に共通であり、Web ページでユーザに現在は関係しないコンテントを隠すために用いられます。
- その他の HTML5 要素
-
Gecko は次の新しい HTML5 要素もサポートします。:
<mark>、<figure>および<figcaption>。 - WebSocket
-
Web アプリケーションとサーバーの間でリアルタイムコミュニケーションを行うための 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 anINDEX_SIZE_ERRexception. - Specifying non-finite values when calling
createLinearGradient()andcreateRadialGradient()now throwsNOT_SUPPORTED_ERRinstead ofSYNTAX_ERR. - Setting
miterLimitto a negative value no longer throws an exception; instead, it properly ignores non-positive values. - Setting
lineWidthto a negative value no longer throws an exception; instead, it properly ignores non-positive values. - The
putImageData()method now supports the optional parametersdirtyX,dirtyY,dirtyWidth, anddirtyHeight.
小さな 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()メソッドの呼び出しが追加されました。このメソッドを用いることでファイル選択ダイアログが開けます。Web アプリケーションからファイルを利用する の記事内の 例 を参照してください。 <input>要素に新しいmozactionhint(en-US) 属性が追加されました。これを用いることで仮想キーボード上でのエンターキーのラベルを指定できます。<iframe>、<noembed>、および<noframes>要素内の<script>要素が実行されるようになりました。以前のバージョンの Firefox ではこれらの要素内での実行はされませんでした。これは仕様準拠であり、他のブラウザの挙動と合致します。
CSS
- CSS transitions
-
新しい CSS transitions サポートが Firefox 4 では利用できるようになりました。
- CSS での算出値
-
-moz-calc(en-US) のサポートが追加されました。これを用いることで、<length>の値を数式で指定できます。 - セレクタのグルーピング
-
セレクタをグループ化しコンビネータを分解する
:-moz-any(en-US) がサポートされました。 - 背景画像の部分領域のサポート
-
-moz-image-rect関数を用いることで、画像の一部分の領域 (subrectangle)を背景画像として利用できるようになります。 - CSS touch プロパティ群
-
touch プロパティ群が追加されました。詳細と正式な記事名は後日追記予定です。
- CSS 背景として任意の要素を使用する (en-US)
-
-moz-element(en-US) CSS 関数とdocument.mozSetImageElement()(en-US) DOM 関数を用いることで、任意の HTML 要素を背景として使用することができます。 - プライバシーと :visited セレクタ
-
CSS セレクタを用いた訪問済みリンクのスタイルについて取得できる情報が変更されました。これはいくつかの Web アプリケーションに影響するかもしれません。
新しい CSS プロパティ
| プロパティ | 説明 |
|---|---|
-moz-font-feature-settings (en-US) |
OpenType フォントの高度な機能を変更できます。 |
-moz-tab-size (en-US) |
テキストを描画するときのタブ文字 (U+0009) の幅を空白文字数で指定します。 |
resize |
サイズ変更可能な要素の方向を制御できます。 |
新しい CSS 擬似クラス
| 擬似クラス | 説明 |
|---|---|
:-moz-handler-crashed (en-US) |
プラグインがクラッシュした要素の表示に用いられます。 |
:-moz-placeholder |
フォームフィールドのガイドテキストに適用されます。 |
:-moz-submit-invalid |
1 つ、もしくは、複数のフォームフィールドの入力が妥当でないときのフォームの送信ボタンに適用されます。 |
:-moz-window-inactive (en-US) |
アクティブでないウィンドウの要素に適用されます。 |
:invalid |
入力が妥当でない <input> フィールドに自動的に適用されます。 |
:optional |
required 属性を指定していない <input> フィールドに自動的に適用されます。 |
:required |
required 属性を指定している <input> フィールドに自動的に適用されます。 |
:valid |
入力が妥当であると判断された <input> フィールドに自動的に適用されます。 |
新しい CSS 擬似セレクタ
| 擬似セレクタ | 説明 |
|---|---|
:-moz-focusring |
Gecko がフォーカスインジケータを描画すべきとしている要素の見え方を指定できます。 |
新しい CSS 関数
| 関数 | 説明 |
|---|---|
:-moz-any (en-US) |
セレクタをグループ化しコンビネータを分解できます。 |
-moz-calc (en-US) |
<length> の値を数式で指定できます。 |
-moz-element (en-US) |
任意の要素を 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 単位の (en-US) 扱いが他のブラウザにより良く適合するように、また、絶対的長さをデバイスの 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属性がサポートされました。これを用いることでメディアファイルでバッファリングされた範囲が判断可能になります。これをサポートするためにTimeRangesDOM インタフェースが実装されました。 - メディア要素での
preload属性 -
HTML5 仕様から
preload属性が実装されました。これは以前実装された(そしてもうサポートされない)autobuffer属性を置き換えものです。これは<video>および<audio>要素、同様にnsIDOMHTMLMediaElementインタフェースを実装した要素で利用できます。 - SVG text 位置指定の改善
-
SVG
<text>and<tspan>要素でx、y、dx、およびdyプロパティの値のためのリストを指定できるようになりました。これを用いることで、文字列中の各文字の位置を個別に制御できます。
DOM
- JavaScript 型付き配列
-
JavaScript 型付き配列 (typed arrays) のサポートが追加されました。これを用いることで、ネイティブデータ型を用いた生のデータを含むバッファを扱えます。 File API (en-US)、WebGL、および WebSockets を含む、いくつかの API でこれを用いることができます。
- 範囲の境界領域の保持
-
Rangeオブジェクトにrange.getClientRects()(en-US) およびrange.getBoundingClientRect()(en-US) メソッドが追加されました。 - 任意の要素上でのマウスイベントのキャプチャ
-
Internet Explorer 由来の
setCapture()とreleaseCapture()API のサポートが追加されました。バグ 503943 を参照してください。 - ブラウザ履歴の操作
-
window.historyオブジェクトを通して利用できる、既存のドキュメント履歴オブジェクトが新しい HTML5 のpushState()とreplaceState()メソッドをサポートするようになりました。 - MozBeforePaint を用いたアニメーション
-
追加された新しいイベントと
window.mozRequestAnimationFrame()(en-US) メソッドおよびwindow.mozAnimationStartTime(en-US) プロパティを組み合わせることで、互いに同期したアニメーションを作成する方法が提供されます。 - タッチイベントとマルチタッチイベント
-
タッチイベントとマルチタッチイベントのサポートが追加されました。
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 プロパティを提供するようになりました。 - DOM の
fileオブジェクトに新しく click()メソッドが追加されました。 - XMLHttpRequest で FormData (en-US) がサポートされました。
element.isContentEditableプロパティが実装されました。document.currentScriptプロパティを用いることで、現在実行されている<script>要素のスクリプトを判別できます。新しく追加されたelement.onbeforescriptexecuteおよびelement.onafterscriptexecuteイベントは script 要素の実行前後に発生します。DragTransferオブジェクトにmozSourceNodeプロパティが追加されました。Selectionオブジェクトにselection.modify()(en-US) メソッドが追加されました。このメソッドを用いると、ブラウザウィンドウでの現在のテキスト選択範囲あるいはカーソル位置を簡単に変更できます。window.directoriesオブジェクトとwindow.openのdirectories特性(これらは他のブラウザではサポートされていません)が 削除されました。代わりにpersonalbarを利用してください。バグ 474058event.mozInputSourceプロパティが DOM ユーザインタフェースイベントに追加されました。この非標準プロパティを用いると、イベントを生成したデバイスのタイプを判別できます。document.onreadystatechangeイベントが実装されました。document.createElementメソッドが Quirks モードでタグ名の前後の<と>を受け入れないようになりました。element.setCapture()およびdocument.releaseCapture()メソッドが追加され、これらを用いることで、指定要素で mousedownイベントが発生した後にマウスが通常の追跡領域を越えても、マウスイベントを追い続けることができます。- The
window.mozPaintCountプロパティが追加されました。これを用いることで、何回ドキュメントが描画されたかを判定できます。これは Web アプリケーションのパフォーマンスをテストするときに役立ちます。 window.navigator.appVersionおよびwindow.navigator.userAgentから言語トークンが削除されました。代わりにwindow.navigator.languageもしくは Accept-Language ヘッダ (en-US) を利用してください。 バグ 572656- XMLHttpRequest オブジェクトに追加された Gecko 固有の
mozResponseArrayBufferプロパティを用いると、レスポンスを文字列と同様 に JavaScript Typed Array として扱えます。 - Mouse イベント (en-US) に
mozPressureプロパティが追加されました。このプロパティは圧力感知をサポートする入力デバイスでの圧力を示します。 window.createBlobURL()window.URL.createObjectURL()(en-US) およびwindow.URL.revokeObjectURL()(en-US) メソッドを用いることで、ローカルファイルを参照する 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 が提案する Web デザイナーとサーバー管理者が Web サイトの相互利用でどのようなコンテンツを指定するかの仕様です。目的はクロスサイトスクリプティングを含む攻撃とデータインジェクション攻撃を判定し、軽減することです。
- HTTP Strict Transport Security
-
HTTP Strict Transport Security は Web サイトがブラウザに 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 標準へのさらなる順守となる予定です。
開発者ツール
- Web コンソールの利用
-
Web コンソールツールは Web 開発者および拡張開発者のデバッグ作業の補助に役立ちます。
メモ: 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 文字を含んでいても、ストリームから文字列に任意のバイトを読み出せます。- JavaScript コードモジュール内で Worker を利用できるようになりました。
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>要素内のタブの一覧を取得できます。 - 新たに
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 を読み込むことを許可できます。Remote XUL Manager 拡張 を用いると、このホワイトリストを管理できます。
小さな XUL の変更
readonly属性がフィールドで正しく動作するようになりました。<xul:resizer>要素でウィンドウをリサイズする代わりにリサイズする要素を指定できるelement属性を用いることができるようになりました。<xul:resizer>要素にtype属性が追加され、これを用いることで、要素の変わりにウィンドウのリサイズグリップを指定し、ウィンドウのリサイズグリップが 2 度描画されることを防ぐことができます。- "active" 属性は XUL ウィンドウでは設定されません。背景ウィンドウに異なるスタイルを指定するための新しい
:-moz-window-inactive(en-US) 擬似クラスを利用してください。 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 情報を表示するを参照してください。
インタフェースの変更
- The
nsIDocShellandnsIWebBrowserinterfaces now have a newisActiveattribute, which is used to allow optimization of code paths for documents that aren't currently visible. - The
nsIMemorymethodnsIMemory.isLowMemory()has been deprecated. You should use "memory-pressure" notifications to watch for low memory situations instead. - The API for handling redirects on HTTP channels has changed to let them be processed asynchronously. Any code that implements redirect handling using
nsIChannelEventSink.onChannelRedirect()needs to be updated to usensIChannelEventSink.asyncOnChannelRedirect()instead. This accepts a callback handler that must be called when a redirect is successfully completed. - The
nsINavHistoryResultObserver.batching()method has been added, providing a way to group Places operations into batches, reducing the number of update notifications delivered, which can improve performance when observers are performing relatively involved tasks (such as refreshing views). - The long-obsolete
nsIPrefinterface has finally been removed. If you haven't already switched tonsIPrefService, now is the time. - The
nsISessionStoreandnsISessionStartupinterfaces received changes to support on-demand session restore. See thensISessionStore.restoreLastSession()method. - The
nsIPrincipalmethodsnsIPrincipal.subsumes()andnsIPrincipal.checkMayLoad(), as well as itsorigin,csp, andURIattributes, are now available from script; previously they were only available from native code. - The
nsIPromptinterface now supports tab-modal alerts; see Using tab-modal prompts for details. - The
nsIEffectiveTLDService.getPublicSuffixFromHost()method now correctly rejects host name starting with a period ("."). - The
mozIJSSubScriptLoader.loadSubScript()method now has an optional argument allowing you to specify the character set of the script; if one is not provided, ASCII is assumed (as was always assumed previously). - The
nsIAccessProxyinterface has been removed. It was an implementation detail that has outlived its usefulness. - The
nsIContentViewandnsIContentViewManagerinterfaces have been added for Firefox Mobile. It represents a scrollable content view whose contents are actually drawn by a separate process. - The
nsIDiskCacheStreamInternalinterface has been added. - The
nsIExternalURLHandlerServiceinterface has been added. - The
nsISyncJPAKEinterface has been added. See bug 601645.
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()メソッドがピリオド (".") で始まるホスト名を正しく拒否するようになりました。
メモリ管理
- 確実なメモリアロケーション
-
Mozilla は null を返さないことを保証する確実なメモリアロケータを複数提供するようになりました。この記事を読んでそれらがどのように動作し、どのようにして不確実な、あるいは、確実なメモリアロケーションを明確に指定して呼び出すのかを学んでください。
その他の変更
- Firefox 内に含まれるリソースのほとんどが単一の JAR アーカイブである
omni.jarにまとめられました。これにより、 I/O が減少し、その結果、起動パフォーマンスが向上しています。詳細は omni.jar についてを読んでください。 accessibility.disablecache設定はサポートされなくなりました。これはデバッグ目的で公開されており、もはや用いられません。- バージョンアップによって GUID が変更になるアドオンが正しく更新されるようになりました。
- プラットフォーム固有のディレクトリを削除した副作用として、各プラットフォーム向けに異なった設定を提供することができなくなりました。
- デフォルトで、拡張はインストール時に展開されなくなりました。その代わりに XPI ファイルから直接実行されます。拡張は古い挙動を選択するためにインストールマニフェスト内で unpack プロパティを使用できます。バイナリコンポーネントや、js-ctypes を利用して読み込まれる DLL、検索プラグイン (en-US)、辞書、ウィンドウアイコンは展開される必要があるように指定しなければなりません。SQLite データベースを生成する拡張や、拡張ディレクトリからファイルシステムへ相対的に何かをコピーする拡張も、それらのコードを変更する必要があるかもしれません。
- カスタマイズされた Firefox にアプリケーションスタートアップ時に自動でインストールされる拡張を含められるようになりました。
その他の変更
- ルートの chrome.manifest ファイルだけが読み込まれるように
-
ルートの
chrome.manifestファイルだけが読み込まれるようになりました。 2 つ以上のマニフェストファイルを読み込む必要がある場合は、ルートのchrome.manifestでそれらを読み込むためにmanifestコマンドを使用できます。 - Gopher サポートの削除
-
Gopher プロトコルがネイティブでサポートされなくなりました。継続してサポートを受けるには OverbiteFF 拡張を利用できます。
- コンテントプロセスイベントハンドリング
-
out-of-process プラグインのサポートとその他の multiple-process 機能をサポートするために、プロセス間でメッセージを送ることをサポートするための新しい API が導入されました。
- ブートストラップ拡張
-
ブラウザを再起動せずにインストール、アンインストール、更新(またはダウングレード)できる拡張を作成できるようになりました。
- デフォルトプラグイン の削除
-
デフォルトプラグインが削除されました。アプリケーションプラグインフォルダもデフォルトで削除されますが、このフォルダ経由でプラグインをインストールするためのサポートはまだ存在します。bug 533891 を参照してください。
- Extension Manager の AddonManager への置き換え
-
nsIExtensionManager は AddonManager に置き換えられました。 指定した拡張 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.downをcmd_scrollBottomにし、browser.gesture.swipe.upをcmd_scrollTopに設定してください。