Firefox 4 for developers
Firefox 4 (6 月後半にベータ版リリースが予定されています)では、パフォーマンスが向上し、 HTML 5 やその他の革新的なウェブ技術のさらなるサポートが追加され、さらには、セキュリティも改善しています。 この記事では、この次期リリースについてのとっかかりの情報と、ウェブ開発者、アドオン開発者、そして、Gecko プラットフォーム開発者向けに利用可能になる機能の一覧を提供します。
これらの機能の多くはすでに Firefox 4 beta リリース、もしくは(冒険心にあふれているなら)ナイトリー trunk ビルド で試すことできます。
メモ: この記事は作成中であり、このページからリンクされている記事もまた同様です。多くの記事名が仮名であり、いくつかのトピックは複数の記事に分割されるかもしれません。
ウェブ開発者向け機能
HTML
- HTML5 パーサー入門
-
HTML5 パーサーが意味することと、どのように SVG と MathML をコンテンツにインラインで埋め込むかの概説。
- HTML5 におけるフォーム
-
HTML5 におけるウェブフォームの改善の概説。これらの変更点には
<input>
要素における入力種類の追加、データバリデーションなどが含まれています。 - HTML5 Sections
-
Gecko は文書におけるセクションに関する新しい HTML5 要素をサポートします。:
<article>
、<section>
、<nav>
、<aside>
、<hgroup>
、<header>
および<footer>
。 -
この属性は、すべての要素に共通であり、ウェブページでユーザーに現在は関係しないコンテントを隠すために用いられます。
- その他の 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 anINDEX_SIZE_ERR
exception. - Specifying non-finite values when calling
createLinearGradient()
andcreateRadialGradient()
now throwsNOT_SUPPORTED_ERR
instead ofSYNTAX_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 parametersdirtyX
,dirtyY
,dirtyWidth
, anddirtyHeight
.
小さな 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-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>
要素でx
、y
、dx
、およびdy
プロパティの値のためのリストを指定できるようになりました。これを用いることで、文字列中の各文字の位置を個別に制御できます。
DOM
- JavaScript 型付き配列
-
JavaScript 型付き配列 (typed arrays) のサポートが追加されました。これを用いることで、ネイティブデータ型を用いた生のデータを含むバッファーを扱えます。 File API、WebGL、および 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 によってコントロールできるようになりました。バグ 41464document.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.open
のdirectories
特性(これらは他のブラウザーではサポートされていません)が 削除されました。代わりにpersonalbar
を利用してください。バグ 474058event.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 を提供します。
小さなコードモジュールの変更
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
擬似クラスを利用してください。 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
nsIDocShell
andnsIWebBrowser
interfaces now have a newisActive
attribute, which is used to allow optimization of code paths for documents that aren't currently visible. - The
nsIMemory
methodnsIMemory.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
nsIPref
interface has finally been removed. If you haven't already switched tonsIPrefService
, now is the time. - The
nsISessionStore
andnsISessionStartup
interfaces received changes to support on-demand session restore. See thensISessionStore.restoreLastSession()
method. - The
nsIPrincipal
methodsnsIPrincipal.subsumes()
andnsIPrincipal.checkMayLoad()
, as well as itsorigin
,csp
, andURI
attributes, are now available from script; previously they were only available from native code. - The
nsIPrompt
interface 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
nsIAccessProxy
interface has been removed. It was an implementation detail that has outlived its usefulness. - The
nsIContentView
andnsIContentViewManager
interfaces have been added for Firefox Mobile. It represents a scrollable content view whose contents are actually drawn by a separate process. - The
nsIDiskCacheStreamInternal
interface has been added. - The
nsIExternalURLHandlerService
interface has been added. - The
nsISyncJPAKE
interface 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、検索プラグイン、辞書、ウィンドウアイコンは展開される必要があるように指定しなければなりません。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
に設定してください。