IE7 まわりの問題

<< 戻る   トップ >>

IE7 (Internet Explorer 7) の Windows Update による自動配布もそろそろ始まる頃合いだし (5月以降って話だったと思うけど)、IE7 の動作はダメブラウザというよりブラウザソフトウェアの個性の問題、という程度にはなっているので、鴨乃嘴南蛮ウェブサイトの IE7 まわりの不具合を何とかしておこうと思う。

まず、最大の問題はアクセス直後に「Welcome ウィンドウ」が正常に表示されない、という問題だ。次に、カレンダーの日付が一日ずれる、曜日がずれるのではなく毎月が二日から始まり一日多い日付になる (例えば、5月は5月2日から5月32日) という問題だ。

IE7 まわりの問題

最初の問題は、どうもウィンドウのディメンジョン (幅、高さ) の決定ができずにいることが問題であるようだ。再現性も悪く、うまくいくときといかないときがある。onload イベントハンドラで駆動しているのにどうしたことか。しかたがないので、次のように解決した。これまでは onload イベント→ウィンドウ生成→非同期通信 (ウィンドウのタイトルやコンテンツをダウンロード) としていたものを、 onload イベント→非同期通信→通信完了→ウィンドウ生成 としてみた。非同期通信中にウィンドウディメンジョンは決定されるだろう、との読みなのだが、どうやらうまくいってくれるようだ。ただし再現性の悪い不具合なので、しばらく注意してみておく必要がある。

次の IE7 では毎月が二日から始まる問題だが、どうやら for in 文によるループの使い方に問題があったようだ。カレンダーのセルの配列をつくり、それを for in 文でループさせていたのだが、どうやらこれでは配列オブジェクト中の余計なプロパティ (lengthなど) もループに組み込んでしまう。Firefox ではプロパティが配列インデックスから始まるので問題なく動作したのだが、IE7 では配列インデックスの前に何かが入ってカウントが狂うようだ。詳細な仕様の違いまでは分析していないが、JavaScript 自体が配列と連想配列を厳密に区別していない (配列は数字をキーとした連想配列) スクリプトなので、配列をループで処理する場合には for in ではなく伝統的な for 文で処理したほうが安全、ということのようだ。for 文に切り替えたところ、IE7 でもちゃんと一日から始まるようになった。

ところで、今気がついたのだが、鴨乃嘴南蛮ウェブサイトを表示すると IE7 って異常なまでに CPU time を消費する。思い当たるふしはないのだが。なぜ? やばい?


作成: 2007-06-16 19:17:16.0更新: 2007-06-16 19:17:16.0
http://museo-anonimo.jp/nanban/?id=516,http://museo-anonimo.jp/nanban/tr/516