質問

非常にニッチな問題:

時々 (30% の確率)、prototype.js ライブラリ (Google のバージョン 1.6.0.2) の 3877 行目で「未定義のハンドラー」JavaScript エラーが発生します。 http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.2/prototype.js).

このページでは Google マップを使用し、Prototype Window ライブラリを使用しています。

この問題はIE7とFF3で発生します。

FireBug が提供する情報は次のとおりです。

handler is undefined
? in prototype.js@3871()prototype.js (line 3877)
handler.call(element, event);

ローカルバージョンのprototypejsに切り替え、問題のあるメソッド(createWraper)にデバッグを追加しましたが、デバッグはエラーの前に表示されません...

グーグルで検索したところ、同じ行でエラーについて他に1件言及されていましたが、答えがなかったので、おそらくいつか誰かが答えを持っているかもしれないので、ここに投稿します:)。

役に立ちましたか?

解決

このエラーは、オブザーバー呼び出しで誤って括弧を付けたままにした場合にも発生することがわかりました。

Event.observe(document, 'myapp:application_ready', myapp.MyClass.initApp());

の代わりに

Event.observe(document, 'myapp:application_ready', myapp.MyClass.initApp);

他のヒント

これによりおそらくエラーが発生します。

Event.observe(myElement, 'click', myFunction(myParameters));

代わりに次のようにする必要があります。

Event.observe(myElement, 'click', function() { myFunction(myParameters) });

Prototypejsのローカルバージョンに切り替えて、問題のある方法(CreateWraper)にいくつかのデバッグを追加しましたが、エラーの前にデバッグが表示されません...

実際、エラーが発生したときに呼び出される問題のある関数は、createWrapper 内で作成される (ただしそこでは呼び出されない)「wrapper」です。基本的に何が起こっているのかというと、要素のイベント ハンドラーとして関数をアタッチしたのに、その関数が実際には存在しないということです。

どの関数が「存在しない」かを特定するためにデバッグ情報を入力しようとしている場合は、行 3871 と行 3878 の間のラッパー関数内のアラート メッセージまたは Firebug コンソール出力を追加します。

本当にシンプルな解決策 「未定義のハンドラー」(prototype.js より) プロトタイプのエラーはただ...プロトタイプを修正します。ここでアドバイスを見つけました: https://prototype.lighthouseapp.com/projects/8886/tickets/407-ie7-i8-report-handler-is-null-or-not-an-object そしてそれは実際に機能しています。

次の行を見つけてください:handler.call(element, event); そして次のように置き換えますif (handler) handler.call(element, event)問題はプロトタイプ 1.6.0.3 および最新で解決されました :)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top