困ったJavaスクリプト


 まず、次の行を見ていただきたい。

    今年は西暦 年です。

 どのように表示されていますか? 多分、次のようになっているのではないだろうか。

    インターネットエクスプロウラの場合 : 今年は西暦 年です。
    ネットスケープナビゲータやオペラの場合 : 今年は西暦 年です。

 これはJavaの getYear を使った結果である。なぜこのような違いが出るのかと言うと、この命令に対して、インターネットエクスプロウラは4桁の答を返し、ネットスケープはそうではないからだ。
 ちょっと解説しておくと、この命令は前世紀から使われている。その際、1900年代の上2桁は省略して、例えば1998年は「98」を返していた。インターネットエクスプロウラは2000年を越えた時に4桁に対応したが、ネットスケープはそのまま継続する形で対応した。すなわち、1999年が99だから2000年は100になるというわけである。以下、数字は1ずつ増えていく。
 しかし、問題はそんなに簡単ではない。試しにコンピューターの時計を1998年に変えてこれを再表示させて欲しい。するとどちらのブラウザでも、98年になってしまうのだ。
 これは困ったことである。普通、ブラウザごとの特殊な機能に関しては、対応していないブラウザについてはタグを無視出来る機能で解決する。例えば次の行、

    アラキス――砂丘デューン――砂漠さばく惑星わくせい

 これはインターネットエクスプロウラの人にはきちんと振り仮名が振られていると思う(ネットスケープの人には申し訳ないが、お見せすることが出来ない)。しかし、ネットスケープ(少なくとも7.1までは)の人には、「砂丘(デューン)」のように、振り仮名が括弧に入って表示されるだろう。これは、振り仮名機能を持たないブラウザに対応する手段である。
 ちなみにソースは次の通りになっている。<>で囲まれた部分を無視すれば、ちゃんと括弧表示になることがわかるだろう。

    <ruby><rb>砂丘</rb><rp>(</rp><rt>デューン</rt><rp>)</rp></ruby>
 しかし、このJavaの年代の問題はどうしようもない。ブラウザによって違う数字を読み出すとは、また何てことをするものだと思う。仕方なく私は、この部分は次のようにして解決している。

    (today.getYear())%1900
 こうすれば、どちらのブラウザで読んでも、1900で割った剰余になるので、例えば2003は103、103もそのまま103である。つまり、形としてはインターネットエクスプロウラの機能を殺しているわけだ。2000年を終えた今、何だか変な気もするのだが、致し方ないというところである。
 しかし本来こんなことはしなくても済むようにして欲しい。どうして統一出来なかったのだろう。
 これは結局、何を重要視するかの考え方が、例の2000年問題が起きたところで整理出来なかったのが原因だろう。もしも1900年代に作られたJavaをそのまま使い続けたければネットスケープが正しく、やはり年代はわかりやすくというのならインターネットエクスプロウラが正しい。それはどちらにも一理はある。個人的には、そもそもコンピューターに時計を入れた時点でこんなこと(2000年問題)には気が付いて然るべきとも思うのだが、まあそれは言っても仕方があるまい。ただ、その先の処理をどうして統一出来なかったのかはまったく理解に苦しむばかりである。

 Javaは使い方によっては、ホームページに面白い機能を持たせることが出来る。しかし、ブラウザの種類によって結果が違うのでは何にもならない。
 個性とは、使い勝手や処理速度などに現れるべきものである。こんなところで出すものではない。

宇宙暦35年11月12日)


開発室に戻る