Deseo poder enviarme todos los errores de javascript en una página. Soy un desarrollador de extensión, por lo que lo siguiente hace hincapié en asegurarse de que el dom esté listo antes de realizar llamadas.Obtenga todos los errores de javascript en la página/javascript error handling
que investigaron la adición de algunas funciones a la throw
también para enviar por correo o las excepciones, pero no encontré que esto sea posible.
1: principal solución a esto, un controlador window.onerror:
window.onerror = function(e, url, line){
mailError('onerror: ' + e + ' URL:' + url + ' Line:' + line);
console.error('\nLine ' + line + ':');
setTimeout(function(){retry();}, 100); //mainly useful in content scripts for extensions,
return true;
}
También puede ser necesario hacer lo mismo a través de jQuery:
$(window).error(
function(e, url, line){
//handle error
}
);
La caída de esto es que su el código ha dejado de ejecutarse.
Para evitar errores al detener la ejecución, es mejor usar devoluciones de llamada para asegurarse de que el código se ejecuta en una secuencia determinada y para utilizar eventos siempre que sea posible. También puede proteger las llamadas dom con algunas técnicas
$(document).ready({
//you usually won't get bad dom calls wrapping your code in this
});
también se puede considerar que ejecutan código en window.onload
window.onload = function(){
//you page will probably twitch upon executing code at this time
//but you will almost never have a bad dom call
};
Otra técnica
if (document.getElementById('iNeedThisElement')) {
//doin work!
document.getElementById('iNeedThisElement').style.display = 'block';
} else {
var stillNeedToTakeCareOfX = true; //false otherwise since it's undefined
mailError('iNeedThisElement was unavailable...');
}
El uso de estas técnicas y acaba de depuración de la aplicación, debe estar bastante bien. Desde console.error, .warn y .log declaraciones no pueden ser recuperados e informaron a su, se proporciona una pequeña suite alternativa a continuación:
var Xe = { }; //Extreme error suite
function extraInfo(e){
//e optional
if(!e)e = true;
//add an extra debug info, such as navigator or current URL
return ' currentURL: '+ document.URL +
'\n userAgent: ' + navigator.userAgent +
'\n platform: ' + navigator.platform +
'\n userid: ' + localStorage.userid +
'\n language: ' + navigator.langauge +
'\n cookies?: ' + navigator.cookiesEnabled;
}
Xe.error = function(e){
console.error(e); //maintain original functionality
mailError('Xe err: ' + e + extraInfo());
}
Xe.warn = function(e){
console.warn(e);
mailError('Xe warn: ' + e + extraInfo());
}
Xe.log = function(e){
console.log(e);
mailError('Xe log: ' + e + extraInfo());
}
Como último zanja, puede intentar continuamente para ejecutar un trozo de código hasta que se ejecuta sin errores. Esto es "2" a continuación.
2: código de grupo en trozos grandes y tratar de volver a ejecutar x segundos más tarde después de la captura de un error, o continuar a la siguiente trozo de código
//defExe = DEFinitely EXEcute this code
//functionArg, reference to a function holding a large chunk of code
//seconds, timeout in milliseconds to re-attempt error free execution of this function
function defExe(functionArg, seconds) {
//seconds is optional
if (!seconds)seconds = 300;
try {
functionArg();
} catch(e) {
//mail the error plus extra info
mailError('caught ' + e + ' attempting to re-execute ' + functionArg.name + ' in ' + seconds + ' milliseconds');
//re-attempt to execute this code
setTimeout(function(){
defExe(functionArg, seconds);
}, seconds);
}
}
esto se utiliza entonces como
//array to group function chunks
var fn = [ ];
fn[1] = function(){
//a large chunk of javascript
}
defExe(fn[1]);
fn[2] = function(){
//another chunk of your program
}
defExe(fn[2]);
# 2 Resumen: Código de grupo en funciones y ejecutar en el bloque try-catch, repitiendo si se detectan errores
¿Sabía que 'fn.1' es inválido synthax? Necesitas usar 'fn [1]'. – HoLyVieR
Así que en realidad creo que he descubierto que lo que quiero hacer es usar el evento YUI disponible, disparado cuando "DOM responde a getElementById" http://developer.yahoo.com/yui/3/event/#onadisponible Ahora solo tengo que hacer una función doc.byId más competente que envuelve las llamadas dom en esta funcionalidad de código YUI. Sin embargo, podría perder un error y, por lo tanto, no descubrir el código que aún no se ejecutó. –