Web アプリケーションの Web ページに奇妙なエラーが表示されていました。すべての HTML/CSS/JS コードを退行的に削除し、以下の基本的で単純なコードにたどり着きました。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head>
<title>test</title>
<script type="text/javascript">
var TestObj =
{
foo: function() {}
}
alert(x); //ok displays "undefined"
var x = TestObj.foo;
var z = TestObj.foo;
</script>
</head><body>
<p onclick='alert(x);'>Click shows function foo!</p>
<img onclick='alert(x);' alt='CRAZY click displays a number in FF/Safari not function foo' src='' style='display: block; width: 100px; height: 100px; border: 1px solid #00ff00;'>
<p onclick='alert(x);'>Click shows function foo!</p>
</body></html>
クレイジーです: P 要素をクリックすると、文字列 "function(){}" が期待どおりに表示されます。しかし、IMG要素をクリックすると、x関数が何らかの方法でメモリから削除されたか、インスタンス化解除されたかのように数値が表示されます(xを「未定義」として表示するのではなく、数値として表示します)。
すぐにテストできるように、上記の動作テストもここに配置しました。
これは、 Firefox 3.6 と Safari 4.0.4の両方で再現できます。
すべてが IE7+ でのみ正常に動作します。
私は本当に無知です.xがJS Firefox/Safariの予約キーワードであるかどうか疑問に思っていました. 助けてくれる人に感謝します!
ご参考までに:
- x() を z() に置き換えると、すべてのブラウザーですべてが完全に機能します (これは私にとってさらにクレイジーです)
- src 属性に実際の画像を追加しても問題は解決しません
- img のスタイルを削除しても問題は解決しません (画像をクリックするのを助けるためだけに画像にスタイルを与えたので、画像の境界線を見ることができます)