Ich kann nicht herausfinden, warum der Prototyp die Fehlermeldungen im Ereignis dom:loaded
und in AJAX-Handlern unterdrückt.Prototyp JS schluckt Fehler in dom: geladen und Ajax Callbacks?
das folgende Stück HTML Gegeben:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Conforming XHTML 1.1 Template</title>
<script type="text/javascript" src="prototype.js"></script>
<script type="text/javascript">
document.observe('dom:loaded', function() {
console.log('domready');
console.log(idontexist);
});
</script>
</head>
<body>
</body>
</html>
Die domready Ereignis ausgelöst wird, sehe ich das Protokoll in der Konsole, aber es gibt keine Hinweise auf Fehler überhaupt. Wenn Sie die console.log(idontexist);
Linie aus dem Handler bewegen, erhalten Sie die
idontexist nicht
Fehler in der Konsole definiert ist. Ich finde es ein wenig komisch, dass in anderen Ereignishandlern, wie "klicken", Sie die Fehlermeldung erhalten, es scheint, dass es nur die dom:loaded
ist, die dieses Problem hat.
Das gleiche gilt für AJAX-Handler:
new Ajax.Request('/', {
method: 'get',
onComplete: function(r) {
console.log('xhr complete');
alert(youwontseeme);
}
});
Sie keine Fehler sehen. Dies ist mit prototype.js 1.6.1, und ich kann keine Hinweise auf dieses Verhalten in den Dokumenten finden, noch eine Möglichkeit, Fehlermeldungen in diesen Handlern zu aktivieren.
Ich habe versucht, mit Firebug Debugger durch den Code schrittweise, und es scheint zu einer Funktion auf der Linie 53 genannt K, wenn es trifft auf die fehlende Variable in den dom:loaded
Handler zu springen:
K: function(x) { return x }
Aber wie? Warum? Wann? Ich kann dort keinen Try/Catch-Block sehen, wie läuft der Programmfluss dort oben ab?
Ich weiß, dass ich die Fehler sichtbar machen kann, indem ich meine Handler dom:ready
in Try/Catch-Blöcke packen, aber das ist keine sehr komfortable Option. Gleiches gilt für das Registrieren eines globalen onException-Handlers für die AJAX-Aufrufe.
Warum unterdrückt es sogar die Fehler? Ist jemand schon einmal darauf gestoßen?
Während ja, das eine Teillösung ist, erwähnte ich, dass ich möchte, eine Lösung zu finden, ohne einen globalen OnException Handler Registrierung für die AJAX-Aufrufe, und dies gilt auch für die per- Anforderungshandler. –