【PR】 TOEIC750点保証講座 【PR】 BBフォンなどIP電話プロバイダ比較 【PR】 足の臭いにグランズレメディー 【PR】 デジカメ・DVDレコーダーなどデジタル家電もAmazon.co.jp |
||||||
・ネスケ4.Xで「私」「自」「時」などが文字化けする対策これまでの復習をしてみます。まず、ネットスケープ4.Xで、ウインドウをリサイズすると文字化けする場合について考えてみました。
条件1:ホームページの文字コードはEUC-JPである。
では、この解決策はないのでしょうか? ちゃんとあります。まずは伝統的な手法から。 ウインドウをリサイズすることによって文字化けしてしまったページは実はリロード(再読み込み)すると、文字化けが解消します。ただ、「文字化けしたらリロードしてください」とサイト訪問者に要求するわけにはいきません。Webmasterである我々の方で対処する必要があります。 まず、この、「ウインドウがリサイズされたら」というのは、Javascriptでイベントを拾うことが可能です。また、ネットスケープ4.Xのユーザーかどうかも、簡単なJavascriptで検出可能です。また、リロードもJavascriptで可能です。つまり、全部、Javascriptで可能です。サンプルコードは下記の通りになります。
上記のようなコードを書けば、リサイズされた場合に、ネットスケープ4.Xの場合はリロードしますので、一瞬文字化けしたものが見えるにしても、最終的には、文字化けしない文章がブラウザには表示されます。しかし、この場合も、「ソースを表示」で表示されるソースは、 のように、やはり文字化けしたままです。 このソースビューアで見た時の文字化けはどうしようもないのでしょうか? 実は解決できるのですが、私がこの解決法を発見したのは意外なところからでした。ネットスケープではJavascriptのdocument.writeを利用している場合、document.writeした結果だけを表示するということは何度も述べてきました。これを何とかIEと同じように"ありのまま"にソース表示できないかと、あれこれ調べていた時のことでした。 結論から言いますと、魔法のメタタグ「<meta http-equiv='expires' content=''>」をHTMLヘッダー部分に入れるだけです。これにより、前頁の「ネットスケープのキャッシュ機構」で明らかにした、ネットスケープの"デュアル キャッシュ問題"は解決します。ネットスケープ4.Xのデフォルトのキャッシュフォルダーは「C:\Program Files\Netscape\Users\ユーザー名\cache」(Windowsの場合)です。このフォルダーを注視してみると、document.writeを用いているのに、一つしかキャッシュファイルは生成されません。そして、このキャッシュファイルは、IEと同じく"ありのままの"ソースであり、キャッシュファイルAです。ここに、二次方程式の解が二つではなく重根を持った時の如く、キャッシュファイルは一つに統一されました。ここでソースを表示してみることにします。 左の画像のように、Javascriptでdocument.writeしている部分も、そのままで表示されています(余談ですが、<script language=〜の行の下に一行空行が入り、同じように</script>の行の上も一行空行が入るのはネットスケープ4.Xの仕様のようです。)。IEでは当たり前のように思っていた機能が、ついにネットスケープでも実現できました。 ここで本題に戻ります。このメタタグを入れたままでウインドウをリサイズしてみたら、どうなるのでしょうか? 早速やってみます。文字化けしません。しかも、一番最初に紹介した「Javascriptのonresizeイベントの検出でリロードという手法」では、ほんの一瞬ですが文字化けした文字が見えていました。しかし、今回のやり方では、文字化け文字は全く見えません。 |
なぜ、このメタタグを入れると文字化けしないのでしょうか? 実は、この「<meta http-equiv='expires' content=''>」というメタタグはキャッシュ制御の際に利用されるメタタグです。つまり、このメタタグがあると、「常にサーバからドキュメントをダウンロードしなさい。ゆめゆめ、キャッシュファイルから読み込むというような、楽をしようという発想はしないように」という命令をブラウザは受け取ることになります。そのため、onresizeというネットスケープ4.Xにとっては「キャッシュファイルからドキュメントを読み込みなおし、そのウインドウサイズにあった形で再描画しなさい」という要求があった場合にも、必ず、そのドキュメントのあるサーバに再接続を試み、最新のドキュメントを取得しようとします。結果的に、キャッシュファイルからの読み込みは行われません。その結果、文字化けは起こりません。 また、必ずサーバからファイルをダウンロードしなおすわけですから、document.write用のキャッシュファイルBは作成する意味がありません。二度と再利用することはないからです。そもそも、document.write時に2種類もキャッシュファイルがあるのは、推測ですが、キャッシュファイルからの読み込みを高速にするために、あらかじめdocument.writeした結果を保存しておこう、という意向だと思われます。ただ、それがEUC-JPのドキュメントの場合、バグっていることが大きな問題なのですが、「キャッシュファイルからの読み込みはなしよ」と宣言されることで2種類準備しておく必要が全くなくなり、結果的に文字化けが解消するというわけです。 この解決法を導くために非常に時間がかかりましたが、ホームページにおける文字化け問題解決の鍵となる考えて方もいくつか出てきていますので、この解決法だけを読まれている方は是非、前の2ページ(「document.write時の文字化けの規則性」「ネットスープ4.Xのキャッシュ機構」)も是非、この機会にお読みください。 次のページでは、CGI(及びPHP)などの技術系メーリングリストでは、SuperFAQと言われる「表示」「可能性」「予定」「申し込み」などの文字の文字化け問題を取り扱います。
|