문제

매우 틈새적인 문제:

가끔(30%의 경우) 프로토타입.js 라이브러리(google의 버전 1.6.0.2)의 3877행에서 '정의되지 않은 핸들러' 자바스크립트 오류가 발생합니다. 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);

프로토타입js의 로컬 버전으로 전환하고 문제가 되는 메서드(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) });

로컬 버전의 프로토 타입으로 전환하고 불쾌한 방법 (CreateWraper)에 디버깅을 추가했지만 디버깅은 오류 전에 나타나지 않습니다 ...

실제로 오류가 발생할 때 호출되는 문제 함수는 createWrapper 내부에 생성된 "래퍼"입니다(그러나 거기에서 호출되지는 않음).기본적으로 무슨 일이 일어나고 있는지는 요소에 대한 이벤트 핸들러로 함수를 첨부했지만 해당 함수가 실제로 존재하지 않는다는 것입니다.

"존재하지 않는" 함수를 찾아내기 위해 디버그 정보를 넣으려는 경우 줄 3871과 3878 사이의 래퍼 함수 내부에 경고 메시지나 방화범 콘솔 출력을 추가하세요.

정말 간단한 솔루션 프로토타입.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