El Atributo ONERROR

Es un evento de JavaScript que se activa cuando ocurre un error al cargar un recurso (como imágenes, scripts, archivos multimedia) o durante su ejecución.
El atributo onerror es un evento de JavaScript que se activa cuando ocurre un error al cargar un recurso (como imágenes, scripts, archivos multimedia) o durante su ejecución. Es fundamental para manejar fallos de carga, proporcionar contenido alternativo y mejorar la resiliencia de una aplicación web.
¿Qué hace onerror?
-
Disparador: Cuando ocurre un error en:
-
Carga de recursos:
<img>,<script>,<link>,<audio>,<video>. -
Ejecución de scripts (errores en tiempo de ejecución).
-
-
Usos principales:
-
Mostrar contenido alternativo si un recurso falla.
-
Registrar errores para diagnóstico.
-
Cargar recursos de respaldo automáticamente.
-
Sintaxis básica
Como atributo HTML (inline):
<!-- Ejemplo en imagen --> <img src="imagen.jpg" onerror="this.src='imagen-respaldo.jpg'">
Con JavaScript (recomendado para más control):
// Ejemplo en script
const script = document.createElement("script");
script.src = "https://cdn.ejemplo.com/script.js";
script.onerror = () => {
console.error("Error al cargar el script");
cargarScriptRespaldo();
};
document.head.appendChild(script);
Ejemplos prácticos
Ejemplo 1: Imagen de respaldo
<img src="foto-perfil.jpg" alt="Foto de perfil"
onerror="this.onerror=null; this.src='imagen-default.png'">
this.onerror = null: Evita bucles infinitos si el respaldo también falla.
Ejemplo 2: Manejar errores en scripts
<script src="https://cdn.ejemplo.com/library.js" onerror="cargarRespaldo()">
</script> <script> function cargarRespaldo() { const script = document.createElement("script"); script.src = "/local/library-respaldo.js"; document.head.appendChild(script); } </script>
Ejemplo 3: Error en video/audio
<video controls>
<source src="video.mp4" type="video/mp4" onerror="manejarErrorVideo(event)">
Tu navegador no soporta video.
</video>
<script>
function manejarErrorVideo(e) {
console.error("Error en video:", e.target.error);
e.target.innerHTML = `<source src="respaldo.mp4" type="video/mp4">`;
e.target.load();
}
</script>
Propiedades clave del evento error
Cuando se usa con JavaScript, el objeto event contiene información útil:
-
event.message: Descripción del error (no siempre disponible). -
event.filename: Ruta del recurso que falló. -
event.lineno: Número de línea donde ocurrió el error (para scripts).
window.onerror = (mensaje, url, linea) => {
console.error(`Error: ${mensaje} en ${url}:${linea}`);
return true; // Evita que el error se muestre en la consola del navegador
};
Diferencias clave entre elementos
| Elemento | Comportamiento de onerror |
|---|---|
<img> |
Se activa si la imagen no carga (ej: 404, formato inválido). |
<script> |
Error al cargar/ejecutar el script. |
<video>/<audio> |
Fallo de carga, formato no soportado, red interrumpida. |
| Global (window) | Captura errores no manejados en la ejecución de JS. |
Mejores prácticas
Evitar bucles infinitos:
En imágenes, restablece onerror a null después de manejar el error:
<img src="imagen.jpg" onerror="this.onerror=null; this.src='respaldo.jpg'">
Registrar errores en servidores:
window.onerror = (mensaje, url, linea) => {
fetch("/log-error", {
method: "POST",
body: JSON.stringify({ mensaje, url, linea })
});
};
Proporcionar alternativas accesibles:
-
Usa
<noscript>para contenido alternativo. -
Combina
onerrorconalten imágenes.
Casos avanzados
Precargar recursos con manejo de errores:
function cargarRecurso(url, respaldo) {
return new Promise((resolve, reject) => {
const img = new Image();
img.src = url;
img.onload = () => resolve(img);
img.onerror = () => {
img.src = respaldo;
resolve(img);
};
});
}
// Uso:
cargarRecurso("banner.jpg", "banner-default.jpg")
.then(img => document.body.appendChild(img));
Monitor de errores en tiempo real:
// Captura todos los errores no controlados
window.addEventListener("error", (event) => {
const { message, filename, lineno, colno, error } = event;
console.error(`Error: ${message} en ${filename}:${lineno}:${colno}`);
if (error.stack) console.error("Stack trace:", error.stack);
});
Errores comunes
<!-- MAL: Bucle infinito si el respaldo también falla -->
<img src="imagen.jpg" onerror="this.src='respaldo.jpg'">
<!-- CONFUSIÓN: No distinguir entre tipos de errores -->
<script onerror="alert('Error genérico')"></script>
Compatibilidad
| Navegador | Soporte | Notas |
|---|---|---|
| Chrome | ✅ Todas versiones | |
| Firefox | ✅ Todas versiones | |
| Safari | ✅ Sí (v. 5+) | |
| Edge | ✅ Todas versiones | |
| Móviles | ✅ Sí (iOS/Android) |
Conclusión
El atributo onerror es esencial para:
- Manejar errores de carga de recursos de manera elegante.
- Mejorar la experiencia del usuario con contenido alternativo.
- Diagnosticar problemas en producción mediante registro de errores.
Recuerda:
- Evita bucles infinitos al usar recursos de respaldo.
- Combina con otros métodos (como
<noscript>) para accesibilidad. - Usa registros de errores para mantener tu aplicación saludable.
¡Ahora puedes crear aplicaciones web más robustas y tolerantes a fallos!