詳細は未確認で何が正しいのかも未調査ですが。
とりあえず、分かったことだけメモ。
現象 §
Webブラウザ上のJavaScriptにて、イベントハンドラが情報を取得するためのeventキーワードが有効となる範囲が、Webブラウザの種類によって異なる。
Internet Explorer 6.0とOpera 8.5では、イベント発生箇所から呼び出した関数内でも参照できるが、Firefox 1.0.7は関数内では参照できない。
再現プログラム §
以下のコードを個々のWebブラウザで開き、キーを押してみる。
"event.keyCodeの評価に失敗しました"というメッセージが、Firefox上でのみ表示される。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>test</title>
<script><!--
function myfunc()
{
try
{
alert(event.keyCode);
}
catch(e)
{
alert("event.keyCodeの評価に失敗しました");
}
}
// --></script>
</head>
<body onkeydown="alert(event.keyCode);myfunc();">
<p>Press any key-down.</p>
</body>
</html>
対策 §
上記のようなケースで、イベントハンドラとなる関数には必要な情報を受け取る引数を付ける。つまり、myfunc(event.keyCode);というようにして呼び出し、必ず必要な情報を明示的に渡す。
感想 §
もしかしたら、普通に書いていると発生しないケースかもしれませんが、サンプルソースを切り貼りしていると、時としてこういうソースが出現してはまる可能性があり得ます。(というか、まさにそのシナリオ通りにはまった)
2005年10月27日追記 §
より詳細には以下を参照。(Motohikoさん、ご連絡感謝)
Motohikoの日記 [Bug] Bug 54341 - window.event has no properties error : pre