我有一些JavaScript(Jquery Tools' Overlay)可能会在错误地使用它的页面上抛出异常,并且我正在尝试优雅地处理它。
我有一个通用的window.onerror处理程序来拯救这些错误并将它们报告回服务器,但是没有被触发。
我也无法在这段代码中包装try / catch,因为它被包含在HTML中的远程脚本中。
关于如何挽救外部脚本引发的错误的任何想法?
更新:这是示例。我应该纠正自己,window.onerror 被触发,但是脚本没有继续运行(在示例中,警报从不警告)。
<html>
<script type="text/javascript">
window.onerror = function(e){ console.log("caught error: "+e); return true;}
</script>
<body>
<!-- this is the line in the dom that causes the script to throw -->
<a rel="nofollow"></a>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">google.load("jquery", "1.4.1");</script>
<script src="http://cdn.jquerytools.org/1.2.5/tiny/jquery.tools.min.js"></script>
<script type="text/javascript">
//this code will throw an error in jquery tools
$("a[rel]").overlay();
alert("it's ok, I still ran.");
</script>
</body>
</html>
答案 0 :(得分:5)
在加载/执行任何其他脚本之前定义错误处理程序。
<script>window.onerror = function(e){}</script>
<script src="external.js"></script>
<script>
function ole(){alert("Hi!")}
ole();
</script>
当您的脚本包含语法错误时,将不会调用错误处理程序:
<script>window.onerror=function(e){alert("?")}
<script>
!@ //The error won't be caught.
</script>