"indefinido manipulador" de prototype.js linha 3877
-
09-06-2019 - |
Pergunta
Um nicho muito problema:
Eu às vezes (30% do tempo) obter um 'indefinido manipulador de' erro de javascript na linha 3877 do prototype.js biblioteca (versão 1.6.0.2 do google: http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.2/prototype.js).
Agora nesta página eu tenho um Mapa do Google e eu uso o Protótipo de Janela biblioteca.
O problema ocorre no IE7 e FF3.
Esta é a informação que o FireBug dá:
handler is undefined
? in prototype.js@3871()prototype.js (line 3877)
handler.call(element, event);
Eu mudei para uma versão local do prototypejs e acrescentou um pouco de depuração no método incorreto (createWraper), mas a depuração nunca aparece antes do erro...
Eu pesquisei em volta e encontrou 1 menção de que o erro na mesma linha, mas nenhuma resposta, então eu estou postando aqui, onde talvez, algum dia alguém vai ter uma resposta :).
Solução
Eu só descobri este erro também ocorre se você acidentalmente deixar no parêntese no seu observador chamada:
Event.observe(document, 'myapp:application_ready', myapp.MyClass.initApp());
em vez de
Event.observe(document, 'myapp:application_ready', myapp.MyClass.initApp);
Outras dicas
Isso provavelmente causará um erro:
Event.observe(myElement, 'click', myFunction(myParameters));
Você deve fazer como esta, em vez disso:
Event.observe(myElement, 'click', function() { myFunction(myParameters) });
Eu mudei para uma versão local do prototypejs e acrescentou um pouco de depuração no método incorreto (createWraper), mas a depuração nunca aparece antes de o erro...
Na verdade, a ofender a função a ser chamada quando ocorre o erro é "wrapper" que é criado dentro createWrapper (mas não ligou para lá).Basicamente, o que está acontecendo é que você já anexado de uma função como o manipulador de eventos para um elemento, e a função, na verdade, não existe.
Se você está tentando colocar qualquer informação de depuração para tentar identificar qual a função de "não existir", em seguida, adicionar as mensagens de alerta ou firebug saída do console dentro da função de wrapper entre linhas 3871 e 3878.
Realmente uma solução simples para "indefinido manipulador" de prototype.js erro no Protótipo é apenas...correcção protótipo.Achei conselhos aqui: https://prototype.lighthouseapp.com/projects/8886/tickets/407-ie7-i8-report-handler-is-null-or-not-an-object e é realmente funcionando.
Basta encontrar a linha com:handler.call(element, event);
e substituir com
if (handler) handler.call(element, event)
problema resolvido com o protótipo 1.6.0.3 e mais recente :)