2000年05月28日

JavaScriptを使ってHTMLのファイルの最終更新日を表示するようにしているが、 NetScapeの4.7やIE5.0でうまく動作しないことがわかった。 2/27の作成日記でも触れたが、 最終更新日は、JavaScriptのdocument.lastModifiedを利用している。 どうもこの値が、最近のブラウザでは、異なっているようだ。 もともとこの値は、ブラウザやそのブラウザが動いているOSの種類によって異なるという 困ったもの。(下図参照)
document.lastModifiedの値
ブラウザの種類ブラウザのVerOS種類
MACWindows
NetScape2.02Thu Mar 11 13:30:48 1999--
3.01Mar 11 04:30:48 199903/11/99 13:30:48
4.5Mar 11 04:30:48 199903/11/99 13:30:48
4.7--Wednesday, May 10, 2000 22:57:52
IE3.011999年 3月 11日 (木) 4:30:48 AM03/11/99 04:30:48
4.5Thu Mar 11 04:30:48 199903/11/99 04:30:48
5--05/10/2000 22:57:52

どうもNetScape4.7やIE5.0では、2000年問題対応を行う上でフォーマットを変えたようだ。 JavaScriptの中では、ブラウザの情報をnavigator.appVersionという値を参照して判断している。 しかし、これもブラウザによって返す値が下図のように異なっている。:-<
navigator.appVersionの値
ブラウザの種類navigator.appVersionの値
NetScape 3.03.0 [ja] (Win95; I)
NetScape 4.054.05 [ja] (Win95; I)
NetScape 4.74.7 [ja] (Win98; I)
IE 3.02.0 (compatible; MSIE 3.0; Windows95)
IE 4.04.0 (compatible; MSIE 4.0; Windows95)
IE 5.04.0 (compatible; MSIE 5.0; Windows98)

今までは、navigator.appVersionの頭から4文字分を取り出して判断していたが、 IEの先頭の数字は、ブラウザのバージョンではないらしい。 どうやらIEのJavaScriptが、どのNetScapeのバージョンと互換があるのかを示しているらしい。 そこで、ブラウザのバージョンを判断するために、まず、ブラウザの種類をnavigator.appNameの 値で判断してから、NetScapeの場合は、今まで通りnavigator.appVersionの頭から4文字分で判断し、 IEの場合は、navigator.appVersionの値からMSIE XXXとあるXXXの部分を切り出せる 正規表現を作って判断するように変更。

身近にMACを使っている人がいないのでどういう値が返されているのかわからないので もしMACを使用している人がいたら、このページにどう表示されているかを教えてください。