Using Firefox 1.5 caching - Mozilla

Using Firefox 1.5 caching
=========================

はじめに
----

Firefox 1.5 ではウェブページ全体をその JavaScript の状態も含めてメモリ内にキャッシュし、1 つのブラウザセッションとして使用します。訪問したページ間の戻る、進むという動作にページのロードが不要になり、JavaScript の状態も保存されます。この機能によってページナビゲーションが非常に高速化します。この機能は **bfcache**（"Back-Forward Cache" のこと）と呼ばれることもあります。このキャッシュ状態はユーザがブラウザを閉じるまで保存されます。

Firefox がページをキャッシュしない場合があります。ページがキャッシュされないプログラム的な理由でよくあるものをいくつか以下に示します。

* ページが `unload` ハンドラを使用している
* ページが "cache-control: no-store" をセットしている
* ページが "cache-control: no-cache" をセットしていて、サイトが HTTPS である
* ページが完全にはロードされないまま、ユーザがそのページから去るナビゲートをする
* トップレベルのページにキャッシュ不可能なフレームがある
* ページがフレーム内にあり、ユーザがそのフレーム内に新しいページをロードする（この場合、ユーザがそのページから去るナビゲートをするとそのフレームに最後にロードされたコンテンツがキャッシュされる）

この新しいキャッシュ機能により、ページロードの挙動が変わります。ウェブ作者は次のことをしたいと思うことがあるでしょう。

* ナビゲートされたことがあるページであることを知ること（そのページがユーザのキャッシュからロードされるとき）
* ユーザがそのページを去るときのページの挙動を定義すること（ページがキャッシュされるようになっている間）

ブラウザの 2 つの新しいイベントによってウェブ作者はそのどちらもできるようになります。

ブラウザの新しいイベント
------------

これらの新しいイベントを使用すると、そのページは他のブラウザでは今までどおりにきちんと表示され（過去の Firefox、Internet Explorer、Opera、Safari でテスト済み）、Firefox 1.5 でロードしたときにこの新しいキャッシュ機能が使用されるようになります。

ウェブページの標準的な挙動は次のとおりです。

1. ユーザがページにナビゲートする。
2. ページロード時にインラインスクリプトが実行される。
3. ページがロードされると `onload` ハンドラが実行される。

4 ステップ目があるページもあります。ページが `unload` ハンドラを使用していると、ユーザがそのページから去るナビゲートをするときにそれが実行されます。`unload` ハンドラが存在しているとそのページはキャッシュされません。

ユーザがキャッシュされたページにナビゲートしたとき、インラインスクリプトと `onload` ハンドラは実行されません（ステップ 2 および 3）。ほとんどの場合、これらのスクリプトの効果が保存されているためです。

そのページにユーザがナビゲートするたびにロード中に実行されるようにしたいスクリプトや他の動作がそのページに含まれている場合、あるいはいつユーザがキャッシュされたページにナビゲートしたかを知りたい場合は、新しい `pageshow` イベントを使用します。

ユーザがそのページから去るナビゲートをするときに実行されるようにしたい動作があるものの、この新しいキャッシュ機能を生かしたく、さらにそれゆえに unload ハンドラを使用したくないという場合は、新しい `pagehide` イベントを使用します。

### pageshow イベント

このイベントは `load` イベントと同じように動作しますが、ページがロードされるたびに実行される点で異なります（一方、Firefox 1.5 ではページがキャッシュからロードされたときには `load` イベントは発動しません）。初めてページがロードされるとき、`load` イベントの発動直後に `pageshow` イベントが発動します。`pageshow` イベントは 初回ロード時には `false` がセットされる `persisted` という真偽値プロパティを使用します。初回ロードでなければ `true` がセットされます（つまり、そのページがキャッシュされているときに true がセットされます）。

ページロードのたびに実行したい JavaScript は `pageshow` イベントの発動時に実行されるようにセットします。

この記事で後に示すサンプルのように、JavaScript の関数を `pageshow` イベントの一部として呼び出す場合、`pageshow` イベントを `load` イベントの一部として呼び出すことで、ページが Firefox 1.5 以外のブラウザでロードされたときにもその関数を呼び出せるようになります。

### pagehide イベント

ユーザがそのページから去るナビゲートをするときに実行する動作を定義したいものの、`unload` イベント（そのページがキャッシュされなくなる）を使用したくないという場合は、新しい `pagehide` イベントを使用することができます。`pageshow` のように、`pagehide` イベントは `persisted` という真偽値プロパティを使用します。このプロパティは、ブラウザがそのページをキャッシュしていなければ `false` がセットされ、ブラウザがそのページをキャッシュしていれば `true` がセットされます。このプロパティに `false` がセットされているとき、`unload` があれば `pagehide` イベントの直後にそれが発動します。

Firefox 1.5 は、そのページの初回ロード時と同じ順番でロードに関するイベントをシミュレートします。フレームはトップレベルの文書と同じように扱われます。そのページにフレームがあると、キャッシュされたページがロードされるときに次のことが起こります。

* メイン文書で `pageshow` イベントが発動する前に、各フレームから `pageshow` イベントが発動する。
* ユーザがキャッシュされたページから去るナビゲートをすると、メイン文書で `pagehide` イベントが発動する前に、各フレームから `pagehide` イベントが発動する。
* 単一のフレーム内でのナビゲーションについては、影響を受けるフレームでのみイベントが発動する。
サンプルコード
-------

下のサンプルは `load` イベントと `pageshow` イベントの両方を使用したページです。このサンプルページは次のような挙動をとります。

* Firefox 1.5 以外のブラウザでは、次のことがページロードのたびに起こる：`load` イベントが `onLoad` 関数をトリガする。`onLoad` 関数は `onPageShow` 関数を呼び出す（付随する関数はもちろんのこと）。

* Firefox 1.5 では、初めてそのページがロードされるときに他のブラウザと同じように `load` イベントが発動する。さらに `pageshow` イベントが発動し、`persisted` に `false` がセットされるために他のアクションは生じない。

* Firefox 1.5 では、キャッシュからページがロードされるときは `pageshow` イベントだけが発動する。`persisted` には `true` がセットされるため、`onPageShow` 関数内の JavaScript アクションだけがトリガされる。

この例では次のことが起こります。

* ページはロードされるたびに現在日時を算出し、表示する。この計算には秒とミリ秒が含まれるため、機能のテストが簡単になる。
* ページの初回ロード時にカーソルがフォームの Name フィールドに移動する。Firefox 1.5 では、ユーザがそのページに戻るナビゲートをすると、カーソルはユーザがそのページから去るナビゲートをしたときにあったフィールドに残る。他のブラウザではカーソルは Name フィールドに戻る。

```html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <title>Order query : Firefox 1.5 Example</title>
    <style type="text/css">
 body,
 p {
 font-family: Verdana, sans-serif;
 font-size: 12px;
 }
 </style>
    <script type="text/javascript">
 function onLoad() {
 loadOnlyFirst();
 onPageShow();
 }

 function onPageShow() {
 // 現在時刻の算出

 var currentTime = new Date();
 var year = currentTime.getFullYear();
 var month = currentTime.getMonth() + 1;
 var day = currentTime.getDate();
 var hour = currentTime.getHours();
 var min = currentTime.getMinutes();
 var sec = currentTime.getSeconds();
 var mil = currentTime.getMilliseconds();
 var displayTime =
 month +
 "/" +
 day +
 "/" +
 year +
 " " +
 hour +
 ":" +
 min +
 ":" +
 sec +
 ":" +
 mil;
 document.getElementById("timefield").value = displayTime;
 }

 function loadOnlyFirst() {
 document.zipForm.name.focus();
 }
 </script>
  </head>
  <body onload="onLoad();" onpageshow="if (event.persisted) onPageShow();">
    <h2>Order query</h2>

    <form
 name="zipForm"
 action="http://www.example.com/formresult.html"
 method="get">
      <label for="timefield">Date and time:</label>
      <input type="text" id="timefield" /><br />
      <label for="name">Name:</label>
      <input type="text" id="name" /><br />
      <label for="address">Email address:</label>
      <input type="text" id="address" /><br />
      <label for="order">Order number:</label>
      <input type="text" id="order" /><br />
      <input type="submit" name="submit" value="Submit Query" />
    </form>
  </body>
</html>
```

一方、上記のページが `pageshow` イベントをリスンせず、すべての計算を `load` イベントの一部として扱う（そして代わりに下のサンプルコード片で置き換える）ものだとすると、ユーザがそのページから去るナビゲーションをするとカーソル位置も日時も Firefox 1.5 にキャッシュされます。ユーザがそのページに戻ると、キャッシュされた日時が表示されます。

```html
<script>
function onLoad() {
 loadOnlyFirst();

// 現在時刻の算出
 var currentTime= new Date();
 var year = currentTime.getFullYear();
 var month = currentTime.getMonth()+1;
 var day = currentTime.getDate();
 var hour=currentTime.getHours();
 var min=currentTime.getMinutes();
 var sec=currentTime.getSeconds();
 var mil=currentTime.getMilliseconds();
 var displayTime = (month + "/" + day + "/" + year + " " +
 hour + ":" + min + ":" + sec + ":" + mil);
 document.getElementById("timefield").value=displayTime;
}

function loadOnlyFirst() {
 document.zipForm.name.focus();
}
</script>
</head>

<body onload="onLoad();">
```

Firefox 用拡張機能の開発
----------------

Firefox 1.5 の 拡張機能 はこのキャッシュ機能を許容するものである必要があります。1.5 とそれより前のバージョンの両方と互換性を持つ Firefox の拡張機能を開発したいのであれば、キャッシュされるようにするトリガについては `load` イベントをリスンし、キャッシュされないようにするトリガについては `pageshow` イベントをリスンしてください。

例えば Firefox 用 Google ツールバーは、1.5 とそれより前のバージョンの両方と互換性を持たせるためには、autolink 関数については `load` イベントをリスンすべきであり、PageRank 関数については `pageshow` イベントをリスンすべきです。


Firefox 1.5 に XUL アプリケーションを対応させる - Mozilla

Firefox 1.5 に XUL アプリケーションを対応させる
================================

このページでは、Firefox 1.5 の変更点のうち、XUL アプリケーション開発者に影響するものについて、リストで示します。

### 仕様の変更

* ツリーウィジェット関連の変更点
* XUL JavaScript での国際文字サポート (拡張 (Extension)で使用する JavaScript に、非 ASCII 文字を含む場合のみ関係します)
* XMLHttpRequest の変更点
* Firefox 1.5 における XUL の変更点
* XPCNativeWrapper がデフォルトになりました。このため、1.0.x と比較して、いくつか挙動 (behavior)が変わっています。
* より簡単な Chrome Registration が採用されたことにより、contents.rdf は、非推奨 (deprecate)になりました。
* オーバーレイされたコンテキストメニュー関連:
 関数 gContextMenu.linkURL() は、gContextMenu.getLinkURL() に名称が変更され、linkURL は、プロパティに変更されました。後方互換性 (backwards-compatible)を確保するためには以下のようにしてください。
 url = 'getLinkURL' in gContextMenu ? gContextMenu.getLinkURL() : gContextMenu.linkURL();
### その他の情報

* nsIXULAppInfo を使用してアプリケーションのバージョンをチェックする方法
* MozillaZine


Firefox 2 のための拡張機能の更新 - Mozilla

Firefox 2 のための拡張機能の更新
=====================

この記事は、 Firefox 2 で正しく動作するように拡張機能を更新したい開発者にとって有益な情報を提供します。

ステップ 1: インストール定義ファイルの更新
-----------------------

最初のステップ — ほとんどの拡張機能で唯一必要なこと — は、インストール定義ファイル install.rdf を更新し、Firefox 2 との互換性を持たせることです。

単純に、Firefox の最大互換バージョンを指示する行を探します (次のように Firefox 1.5 向けになっています)。
```

 <em:maxVersion>1.5.0.*</em:maxVersion>
```

これを変更して Firefox 2 と互換性を持たせます。
```

 <em:maxVersion>2.0.0.*</em:maxVersion>
```

そして、拡張機能を再インストールします。

ステップ 2: XUL オーバーレイの更新
---------------------

Firefox 2 はデフォルトのテーマに変更を加えています。さらに、一部のユーザインタフェース要素が変更、または移動されているため、あなたの拡張機能の XUL オーバーレイに依存する部分が影響を受けます。

拡張機能の XUL オーバーレイに影響する変更箇所について学ぶには、Firefox 2 におけるテーマの変更点の記事に目を通してください。

ステップ 3: テスト
-----------

公式にリリースする前に、必ず拡張機能を Firefox 2 上でテストしてください。最後にすることは、Firefox のリリース時に起こる問題報告のラッシュに、あなたの拡張機能の新バージョンが責任を持つことです。

ステップ 4: リリース
------------

http://addons.mozilla.org 上のあなたの拡張機能のエントリーを更新してください。ユーザが更新を見つけられるようになります。

さらに、あなたの拡張機能のインストール定義ファイルで `updateURL` を提供している場合は、必ず update manifest を更新し、Firefox が自動的に拡張機能の新バージョンを見つけられるようにしてください。こうすることによって、ユーザが Firefox 2 にアップグレードした後で最初にあなたの拡張機能を実行した時、新バージョンを自動的にインストールさせることができます。


Firefox へのフィードリーダーの追加 - Mozilla

Firefox へのフィードリーダーの追加
=====================

Firefox 2 より、Firefox はフィードを読む際に使う RSS または Atom フィードリーダを選択できるようになっています。この記事ではデフォルトではサポートされていないリーダを追加サポートさせる方法について説明します。

新しいウェブベースのフィードリーダの追加
--------------------

新しいウェブベースのフィードリーダを追加サポートさせるためにやらなければならないことは、3 つの新しい設定項目を追加することだけです。

`browser.contentHandlers.types.number.title`

フィードリーダの名前。

`browser.contentHandlers.types.number.type`

フィードリーダに使用するため、ここは "application/vnd.mozilla.maybe.feed" にする。

`browser.contentHandlers.types.number.uri`

フィードリーダの URI。フィードの URL が挿入されるべき部分に "%s" を使用する。

`number` は既に使われている数のうち最大のものよりもより 1 つ大きな数で置き換えてください。例えば "Easy Reader" という新しいフィードリーダを追加したい場合、かつ 0 から 4 までの数が指定されたコンテンツハンドラが既に定義されている場合、このように `number` には 5 を使用してください。

* `browser.contentHandlers.types.5.title`: `Easy Reader`
* `browser.contentHandlers.types.5.type`: `application/vnd.mozilla.maybe.feed`
* `browser.contentHandlers.types.5.uri`: `http://www.theeasyreaderurl.com?feed=%s`

`about:config` を使うことでこれらの設定項目を手動で追加できます。拡張機能で新しいフィードリーダをインストールしたいのであれば、プログラム側で行うこともできます。

### ウェブアプリケーションからのフィードリーダの追加

ウェブ上の JavaScript コードから簡単にフィードリーダを追加することができます。このためには、このような `navigator.registerContentHandler()` 関数を使用します。

```js
navigator.registerContentHandler(
  "application/vnd.mozilla.maybe.feed",
  "http://www.theeasyreaderurl.com?feed=%s",
  "Easy Reader",
);
```

### 新しいフィードリーダアプリケーションの追加

これを最も簡単に行う方法というのは、単に設定（あるいは オプション、ご使用のプラットフォームによります）ウィンドウの フィード パネルという既存のユーザインタフェースを使用することです。

**メモ:** Firefox 8 よりフィードパネルは無くなっています。フィードリーダーの開発者が、Web フィードの処理の為のオプションをご自分で追加する場合、上記の同様の JavaScript コードを実装することをお勧めします。

これも拡張機能からプログラムで行うこともできます。フィードリーダに使うアプリケーションのパス名を `browser.feeds.handlers.application` オプションの値に設定することで可能です。

関連情報
----

* `window.navigator.registerContentHandler()`


Firefox 2 のセキュリティ - Mozilla

Firefox 2 のセキュリティ
=================

この記事では、Firefox 2 のセキュリティに影響を与える変更点について説明しています。

Weak ciphers disabled by default
--------------------------------

Firefox 2 disables SSLv2 and the weak "export" cipher suites (those with key lengths less than 64 bits) by default, in favor of SSLv3. This provides improved security.

The preferred encryption methods are `TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA` and `TLS_RSA_WITH_3DES_EDE_CBC_SHA`. Some servers refer to these as `SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA` and `SSL_RSA_WITH_3DES_EDE_CBC_SHA`.

If SSLv2 support must be enabled, it can be by setting the appropriate `security.ssl2.*` user preferences to `true`.

New features
------------

* Firefox 2 supports Elliptic Curve Cryptography in TLS. Support is presently limited to curves of 256, 384, and 521 (yes, 521) bits.
* Firefox 2 supports the TLS server name indication extension to facilitate secure connections to servers hosting multiple virtual servers on a single underlying network address, as per RFC 3546.
* When Firefox 2 makes an OCSP request to validate a web server's certificate, it now uses the proxy that has been configured for normal HTTP traffic.
Determining what ciphers are available
--------------------------------------

As always, you can find out what ciphers are supported — and which are enabled or disabled — by going to about:config and searching on "ssl" or "tls".

Security improved for the jar: protocol
---------------------------------------

In order to correct a potential security problem when using the `jar:` protocol, it's now necessary to serve JAR files with the MIME type `application/java-archive`. See Security and the jar protocol for further details.