【PR】 ADSL対応プロバイダ・キャンペーン情報 【PR】 DVDをお探しならamazon.co.jp 【PR】 スピードテストで速いプロバイダは? 【PR】 マジックリスニング・よくある質問 |
||||||
Javascriptの外部ファイル内でdocument.writeしたら文字化け(Mac IE 4.5編)ロリポップ!なら初心者でも安心! ホームページ簡単作成 「ホムペロリ!」、「woopa!」 CGI簡単設置 「CGI CANDYBOX!」が無料で使えます!! ) この文字化けはMac版IE4.5のみで起こる現象です。同じMac版IEでもIE5.0以上では起こりません。Mac版IE4.5では、Javascriptの外部ファイル内でdocument.writeをすると、日本語が文字化けすることがあります。左の画面キャプチャーは「あいうえお」と出力しています。この文字化けの仕方は半角カタカナが出没するわけでもなく、どのような理由で文字化けが発生しているかを推定するのは正直、困難だと思います。しかし、マイクロソフトがちゃんとサポートページに掲載してくれていました。 (参照)▼[M_IE45] JavaScript で出力した日本語文字列が不正 http://support.microsoft.com/default.aspx?scid=http://www.microsoft.com/japan/support/kb/articles/JP415/3/19.asp これによると、Mac版IE4.5では、Javascriptの外部ファイルの文字コードが実際にはShift_JISであったとしても、全てUTF-8であると『思い込み』、本体のHTMLファイルとせ合体させてしまうというのです。 マイクロソフトが公開している『回避策』は「document.write にて日本語を利用する際には、外部の JavaScript ファイルをインクルードして利用せずに、HTML 内で記述するようにします。 」というものですが、外部ファイルにせざるをえない場合もあるでしょう。この回避策では満足できませんね。
余談になりますが、以前、Flashをある方に作成してもらったものをMac版IE4.5でテストしていて、以上のような分割法を適用しなければならないことを初めて知ったのでした。そのFlashには、Flashプラグインの判別を行うためのスクリプトが書かれていたのですが、Javascript内で『Windows版IE用のVBScriptによるプラグイン判別コード』がdocument.writeされていたため、Mac版IE4.5の場合、Javascriptコードがそのままブラウザに表示されてしたのでした。いろいろ調べて、上記のような分割法の存在を知ったという経験があります。 【広告】クリック報酬だけじゃ物足りない?⇒バリューコマースならセールス報酬も稼げる! (現在、Windows版Flash MXを利用していますが、Flash MXのパブリッシュ機能では少なくとも、この不具合は修正されていて、「document.write('<SCR' + 'IPT LANGUAGE=VBScript\> \n');」と分割したコードが出力されています。) (また、Mac版IE4.5のみならず、Google先生でも同じようにJavascript内でdocument.writeされている</script>を終了タグであると誤認してしまう不具合があります。本来、検索対象にならないはずのJavacriptコードが検索サマリーに出現するのはこういうわけです。この検索サマリーの不具合については、こちらを参照してください。) さらに話が逸れますが、Mac版IE4.5はFlashの鬼門と呼ばれていて、非常に多くの不具合があります。
(参照)▼ Macromedia Flash : fl0139 - Macintosh Internet Explorer 4.5 でおこる不具合 話を元に戻しますと、上記のようなコードを書くことで、Mac版IE4.5の場合のみ、UTF-8で保存された外部ファイルが読み込まれます(UTF-8で保存するには、秀丸エディタなどのテキストエディタで簡単にできます。)ので、文字化けは発生しません。 ここまで書いてきて、Mac版IE4.5だけの問題であれば、一層のこと、ページ本文の文字コードをEUC-JPにしてしまえば、外部ファイル(JSファイル)の文字コードもEUC-JPで統一できるではないかとお考えのかたもおられるでしょう。しかし、このやり方は、次のページで説明しますように、うまくいきません。Mac版IE4.5は外部ファイルの文字コードをUTF-8であると決め付けますが、Mac版ネットスケープ4.7はShift_JISと決め付けます。ですので、ページ本文をUTF-8にしても、結局は外部ファイルの読み込みをJavascriptで振り分ける作業は必要であり、UTF-8に対応していない古いブラウザの存在を考えると、ページ本体の文字コードをUTF-8にするのは問題があるでしょう。結局、ページ本体はShift_JISで作成し、Mac版IE4.5のみ異なる外部ファイルを読み込むようにするのが一番妥当でしょう。 もう一つの方法は、日本語を出力しようとするから文字化けするのですから、外部ファイル内でdocument.writeする場合は、日本語部分はエンコードし、それをデコードして出力する形であれば、外部ファイルを2つ用意することなく、文字化けを解消できます。ただ、この場合にエンコードする場合に単純にescape関数を用いると、トラブルになります。なぜかと言えば、escape関数はIEとネットスケープで挙動が違うからです。ネットスケープでは、いわゆるURLエンコードしてくれますが、IEではunicodeでエンコードしてしまうからです。そこで一工夫必要です。
(参照)▼ HTMLソースの隠し方:Javascriptのescape関数で判読を難しくする
(参照)▼ HTMLソースの隠し方:ソースを外部ファイル化する(CGI編) ちなみに、Mac版IE4.5では、「<script type="text/javascript" src="js.js" charset="Shift_JIS">」などとしても動きませんでした。 次のページでは、上述したMac版ネットスケープ4.7で発生する文字化けパターンを検証してみます。
|