Safari / Konqueror 問題

<< 戻る   トップ >>

Safari と Konqueror で、鴨乃嘴南蛮が正常に表示できない問題について解析を始めた。主要な症状は、次のとおり。

  1. カレンダーが表示されない。
  2. メニューリストが表示されない

Konqueror の設定でエラー表示/デバッグを有効にしてエラーの発生箇所を調べた。どうやら、XMLHttpRequest オブジェクトの処理に問題があるらしい。同オブジェクトの responseText には確かに送信された XML データが入っているのだが、responseXML は null になってしまっている。これは、responseText の XML パーサがうまく動作しなかったことを示している。

ところが、より複雑な XML を取り扱うウェブウィンドウの処理には問題がなく、ウェルカムウィンドウはちゃんと表示されるのだ。この場合は XML パーサはちゃんと動作しているわけだ。この違いは何か?

そういえば、ウェブウィンドウの処理では、日本語が含まれるデータを CDATA セクション <![CDATA[ ... ]]> で括った。カレンダーやメニューリスト関係のデータではこれを省略したのだ。

ウェブで調べてみると、Konqueror / Safari の XMLHttpRequest オブジェクトの日本語処理には若干の癖があるらしい。現在テストに使っているのは Konqueror 4.05 だが、3.3 のころに XML宣言で encoding を定義しても UTF-16 / UTF-16 LE BOM 以外の日本語を受付ないという高橋 登史朗さんの報告がある (「JavaScript++かも日記」2005年04月21日 )。

対策は、日本語が入る可能性のある属性値や要素は、CDATA セクションを付加するということでよいだろう。本来、UTF-8 ならばよっぽど変な文字エンティティでも混ざっていなければ取り扱ってくれてもよいはずだが...。

そして悲しすぎる結末

ということで、日本語のデータの部分をせっせと CDATA セクションにしてみた。しかし相変わらず responseXML は null のまま。したがって、これが原因ではなさそう、との結論に達し、うまくいくウェブウィンドウとうまくいかないカレンダー/メニューのコードの徹底比較をしてみたところ...

		response.setContentType( "text/XML" );

この "XML" を "xml" に変更すれば問題無し。っていうか、MIME Type なんだから小文字だろう。このあたりを、Firefox や IE7 はアバウトにケースインセンシティブに処理し、Konqueror/Safari はちゃんと処理してくれたわけなのだ。

要するに、すっげぇ初歩的ミス。


作成: 2008-06-15 16:47:39.0更新: 2008-06-15 19:21:13.0
http://museo-anonimo.jp/nanban/?id=655,http://museo-anonimo.jp/nanban/tr/655