我无法弄清楚为什么原型会在dom:loaded
事件和 AJAX 处理程序中抑制错误消息。
给定以下 HTML:
<!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>
domready 事件触发,我在控制台中看到日志,但没有任何错误迹象。如果将console.log(idontexist);
线移出处理程序,则会得到
idontexist 未定义
控制台中的错误。我觉得有点奇怪,在其他事件处理程序中,比如“点击”,你会收到错误消息,似乎只有dom:loaded
它有这个问题。
AJAX 处理程序也是如此:
new Ajax.Request('/', {
method: 'get',
onComplete: function(r) {
console.log('xhr complete');
alert(youwontseeme);
}
});
你不会看到任何错误。这是prototype.js 1.6.1,我在文档中找不到这种行为的任何迹象,也找不到在这些处理程序中启用错误报告的方法。
我尝试使用 FireBug 的调试器单步执行代码,当它遇到dom:loaded
处理程序中缺少的变量时,它似乎跳转到第 53 行名为 K 的函数:
K: function(x) { return x }
但是怎么做?为什么?什么时候?我在那里看不到任何 try/catch 块,程序如何流到那里?
我知道我可以通过将我的dom:ready
处理程序打包在 try/catch 块中来使错误可见,但这不是一个很舒服的选择。为 AJAX 调用注册全局 onException 处理程序也是如此。
为什么它甚至会抑制错误?以前有人遇到过吗?