[更新]。我需要更精确,我看...... 请参阅javascript中的以下示例:
<html>
<head>
<script>
window.onerror = function() {
alert('error'); // this one works
try {i.dont.exist += 0;}
catch(e) {
// do some stacktrace stuff, this does not trigger
alert(e.stack);
}
};
</script>
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js' type='text/javascript'></script>
<script>
$(document).ready(function() {
foo[1]++;
});
</script>
</head>
<body>
<p>Hello world.</p>
</body>
</html>
2.未触发警报。为什么? 如果我将“foo [1] ++”替换为“这是一条虚假行”,一切正常并触发两个警报。是否存在运行时错误问题?
答案 0 :(得分:1)
由于您的Javascript错误导致错误处理函数未成功定义,因此未触发警报:-)该代码块无法正确解析,因此无法运行。
以这种方式设置:
<script>
$(function() {
window.onerror = function() {
// ...
};
});
</script>
如果它在自己的脚本标签中,那就没关系。现在,您可能需要重新考虑将错误处理程序的定义延迟到“就绪”事件处理,因为在达到该点之前可能会出现错误。
[编辑]好了这里是一个完整的例子,它对我来说很好用:
<html>
<head>
<script>
window.onerror = function() {
alert("OH NO THERE HAS BEEN AN ERROR!");
};
</script>
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js' type='text/javascript'></script>
<script>
$(function() {
here is some bogus stuff that will cause Javascript parse errors.
});
</script>
</head>
<body>
<p>Hello world.</p>
</body>
</html>