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

时间:2015-01-22 01:36:27

标签: javascript syntax-error

我正在处理一个函数,以便在页面上出现js错误的任何时候进行跟踪。我有4/6错误类型工作,但似乎无法找出语法错误的函数,或者他们只是停止脚本执行到它不起作用的点? 另外,我不确定如何测试内部错误? 编辑:InternalError仅在firefox,中,但需要对EvalError进行测试,我将单独发布。另一个编辑:看起来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/

1 个答案:

答案 0 :(得分:0)

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

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