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
onerror
conalt
en 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!