javascript 语法和内部错误的事件侦听器

javascript event listener for syntax and internal errors

我正在开发一个功能,可以随时跟踪页面上出现的 js 错误。我有 4/6 的错误类型在工作,但似乎无法找出语法错误的函数,或者它们只是停止脚本执行到它不起作用的程度? 另外,我不知道如何测试内部错误? 编辑:InternalError 仅在 firefox 中存在,但需要对 EvalError 进行测试,我将单独post。另一个编辑:看起来 EvalError 是遗留的,现代浏览器不完全支持。

不能使用jQuery等库,只能使用原生js

这是添加了答案的代码:

   errorTracking = function errorCaught( ev ) {
    document.getElementById('error').innerHTML = '';
    var errFile = '';
    var errLine = '';
    if(ev.filename) { errFile = ev.filename; }
    if(ev.lineno) { errLine = ev.lineno; }
    var errStr = 'ERROR: ' + ev.error + ', LOCATION: ' + errFile + ', LINE NUMBER:' + errLine;
    document.getElementById('error').innerHTML = '<strong>Message:</strong> ' + ev.error + '<br /><strong>Location:</strong> ' + errFile + '<br /><strong>Line Number:</strong> ' + errLine;
    // Omniture Error Tracking.
    //_satellite.setVar('jsError', errStr);
  ev.preventDefault();
};

if(window.addEventListener) {
    window.addEventListener( "error", errorTracking, false );
    document.getElementById('errRef').addEventListener('click', function() {
        var refErr = asdf.asdf.length;
    });
    document.getElementById('errTyp').addEventListener('click', function() {
        var typeErrVar = null;
        var typeErr = typeErrVar();
    });
    document.getElementById('errRan').addEventListener('click', function() {
        Array.apply(null, new Array(1000000)).map(Math.random);
    });
    document.getElementById('errURI').addEventListener('click', function() {
        decodeURIComponent("%");
    });
    document.getElementById('errSyn').addEventListener('click', function() {
        var script = document.createElement('script');
        script.text = document.getElementById('error');
        document.getElementsByTagName('head')[0].appendChild(script);
    });
    document.getElementById('errEva').addEventListener('click', function() {
    });
}

http://jsfiddle.net/swv55c35/17/

<script/>'s 将被完全解析,当脚本包含语法错误时,整个脚本将被丢弃。在处理错误的脚本之外创建语法错误,它将起作用。

http://jsfiddle.net/swv55c35/3/