イベントハンドラは利くのにJavaScript が利かない!?
関数 mouseOverHoge() は定義されていません。 関数 mouseOutHoge() は定義されていません。
onMouseOver もしくは、onMouseOut が設定されているメニュー形式のリンクをクリックしたとき、次に表示されるページが、リンク前の画面と全く同じ場所に同じメニュー形式のリンクを表示する場合、画面が切り替わる瞬間にメニュー上でマウスをぐりぐりする、つまりonMouseOver とonMouseOut を実行するような動作をすると、ほんの一瞬だがJavaScript エラーが出る。エラー内容は、onMouseOver とonMouseOut に設定されているJavaScript の関数呼び出しに失敗しているとのこと。それがいくつも出るが、表示が完全に終了すると出なくなる。
リンクをクリックした瞬間にリンク元メニューを非表示にする設定にしたところ、エラーが少なくなったことから、あくまで推測の域を出ないが、おそらく以下のような問題。
- リンクをクリック
- リンク先、およびリンク先JavaScript の読み込み
- リンク元JavaScript のクリア
- (ページは表示されているのにJavaScript がセットされていない)
- リンク先ページの表示
- (ページは表示されているのにJavaScript がセットされていない)
- リンク先JavaScript のセット
JavaScript がクリアされてからリンク先が表示されるまで、リンク先が表示されてからJavaScript がセットされるまでのごくわずかな間に、イベントハンドラは利くのにJavaScript がメモリ上にセットされていない瞬間があるらしい。
単純に、JavaScript の読み込み自体がHTML の描画に追いついてないのなら分かるが、現象が発生したページでは、メニューリンクの表示そのものをJavaScript で行っている。なお、表示を行うJavaScript が実行される前にonMouseOver とonMouseOut の関数は読み込まれている。
ちなみにIE では起こらないらしい。というのも、リンク先ページを表示する直前に、画面がリフレッシュされるからだ。
なんとかしてくれ。