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() {
});
}
<script/>
's 将被完全解析,当脚本包含语法错误时,整个脚本将被丢弃。在处理错误的脚本之外创建语法错误,它将起作用。
我正在开发一个功能,可以随时跟踪页面上出现的 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() {
});
}
<script/>
's 将被完全解析,当脚本包含语法错误时,整个脚本将被丢弃。在处理错误的脚本之外创建语法错误,它将起作用。