Aptana Jaxer で、ある特定の条件で HTML ページをレンダリングすると、
Internet Explorer で、誤った文字セットを使用して HTML ページがレンダリングされる という振る舞いが引き金となって、IE6 と IE7 で文字エンコーディングの検出を誤認することがあります。
HTML ページのなるべく先頭に、次のような meta 要素を指定しているにも関わらず、IE6 と IE7 は文字エンコーディングを UTF-8 でなく Shift_JIS として認識してしまいます。
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
この文字エンコーディングの誤認は、Aptana Jaxer が HTML ページをレンダリングするときに自動的に挿入する、次のような script 要素の文字列長と関係しています(と推測しています)。
<html xml:lang="ja" xmlns="http://www.w3.org/1999/xhtml" lang="ja"><head>
<script src="/jaxer/framework/clientFramework_compressed.js?version=0.9.7.2472"></script>
<script>Jaxer.Callback.pageSignature = ...</script>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
Aptana Jaxer は、html 要素のすぐ後に Jaxer Client Framework の JavaScript ファイルと、サーバとクライアント間の引き渡すデータを JavaScript コードを追加します。この追加する JavaScript の文字列長は、クライアントからサーバにコールバックするかどうか、
サーバからクライアントにデータを引き渡す かどうかの条件によって変わってきます。
Aptana Jaxer が追加する script 要素の位置を変更する方法は見つかっていないため、次のとおり、HTTP ヘッダを使って文字エンコーディングが UTF-8 であることを明示すれば、この問題は解決できます。
Aptana Jaxer の中で HTTP ヘッダを上書きできます。次のとおり、Jaxer.Response.addHeader メソッドを使って、Content-Type ヘッダを上書き(引数 true)します。このとき charset=utf-8 を明示します。
Jaxer.response.addHeader('Content-Type', 'text/html; charset=utf-8', true);もしくは Apache 2.2 の MIME タイプの設定を、次のように変更します。このとき charset=utf-8 を明示します。
AddType "text/html; charset=utf-8" htmlなお、このエントリで扱った Aptana Jaxer のバージョンは 0.9.7.2472 のものです。ですので、先日公開された 1.0.0 RC B では改善されているかもしれません(未確認です)。