El Atributo ONEMPTIED

Es un evento de JavaScript que se activa cuando un elemento multimedia como audio o video se vacía abruptamente. Esto ocurre cuando el recurso deja de estar disponible, se restablece o se interrumpe su carga.
El atributo onemptied es un evento de JavaScript que se activa cuando un elemento multimedia (como <audio> o <video>) se vacía abruptamente. Esto ocurre cuando el recurso deja de estar disponible, se restablece o se interrumpe su carga. Es útil para manejar escenarios donde el contenido multimedia falla o se reinicia inesperadamente, mejorando la experiencia del usuario.
¿Qué hace onemptied?
-
Disparador: Cuando el elemento multimedia pierde su fuente actual y queda en estado "vacío".
-
Casos comunes:
-
Llamar al método
load()para restablecer el elemento. -
Eliminar la fuente del elemento (
src = ""). -
Fallos en la carga de contenido en streaming.
-
-
Estado resultante:
-
readyState = 0(HAVE_NOTHING): El elemento no tiene información sobre el recurso. -
duration = NaN: Duración desconocida.
-
Sintaxis básica
Como atributo HTML:
<video src="video.mp4" onemptied="manejarVacio()">
</video>
Con JavaScript (recomendado):
const video = document.getElementById("miVideo");
video.addEventListener("emptied", () => {
console.log("El video se ha vaciado");
});
Ejemplos prácticos
Ejemplo 1: Mostrar mensaje de error
<video id="video" src="video.mp4" controls></video>
<p id="mensaje" style="color: red; display: none;">¡El video se ha perdido!</p>
<script>
document.getElementById("video").addEventListener("emptied", () => {
document.getElementById("mensaje").style.display = "block";
});
</script>
Ejemplo 2: Reiniciar un reproductor personalizado
<div class="reproductor">
<video id="video" src="video.mp4"></video>
<button id="reiniciar">Reiniciar</button>
</div>
<script>
const video = document.getElementById("video");
const boton = document.getElementById("reiniciar");
video.addEventListener("emptied", () => {
boton.style.display = "block";
});
boton.addEventListener("click", () => {
video.src = "video.mp4";
video.load();
boton.style.display = "none";
});
</script>
Ejemplo 3: Cargar una fuente alternativa automáticamente
<video id="video" src="stream-en-vivo.m3u8" controls></video>
<script>
const video = document.getElementById("video");
video.addEventListener("emptied", async () => {
try {
video.src = "respaldo.mp4";
await video.play();
} catch (error) {
console.error("Error al cargar respaldo:", error);
}
});
</script>
Diferencias clave entre eventos relacionados
| Evento | Descripción |
|---|---|
onemptied |
Elemento multimedia se vacía abruptamente |
onabort |
Usuario detuvo la carga manualmente |
onerror |
Ocurrió un error durante la carga/reproducción |
onstalled |
El navegador no puede recuperar datos |
Mejores prácticas
Recuperación automática:
Intenta cargar una fuente alternativa al detectar emptied:
video.addEventListener("emptied", () => {
if (video.src !== "respaldo.mp4") {
video.src = "respaldo.mp4";
video.load();
}
});
Feedback al usuario:
Muestra mensajes claros y opciones de acción (ej: "Volver a cargar").
Limpiar recursos:
Detén la reproducción y libera memoria si es necesario:
video.pause();
video.removeAttribute("src");
video.load();
Casos avanzados
Monitoreo de transmisiones en vivo:
<video id="stream" controls>
<source src="stream.m3u8" type="application/x-mpegURL">
</video>
<script>
const stream = document.getElementById("stream");
stream.addEventListener("emptied", () => {
console.warn("La transmisión en vivo se ha interrumpido");
// Reconectar después de 5 segundos
setTimeout(() => {
stream.src = "stream.m3u8";
stream.load();
}, 5000);
});
</script>
Integración con APIs de estado:
let estadoServidor = "activo";
video.addEventListener("emptied", async () => {
const respuesta = await fetch("/estado-servidor");
if (!respuesta.ok) {
mostrarModal("El servidor de medios está fuera de línea");
}
});
Errores comunes
<!-- MAL: No manejar el evento --> <video src="video.mp4"></video> <!-- El usuario no sabe qué pasó si falla --> <!-- CONFUSIÓN: Usar onemptied para errores de red --> <!-- Para errores de red, usa onerror en su lugar -->
Compatibilidad
| Navegador | Soporte |
|---|---|
| Chrome | ✅ Sí (v. 15+) |
| Firefox | ✅ Sí (v. 20+) |
| Safari | ✅ Sí (v. 6+) |
| Edge | ✅ Sí (v. 12+) |
| Móviles | ✅ Sí (iOS/Android) |
Conclusión
El atributo onemptied es esencial para:
- Manejar interrupciones inesperadas en contenido multimedia.
- Mejorar la resiliencia de reproductores en aplicaciones web.
- Ofrecer experiencias de usuario profesionales con recuperación automática.
Recuerda:
- No abuses de reintentos automáticos sin notificar al usuario.
- Combínalo con otros eventos (
error,stalled) para un manejo completo. - Prueba en condiciones de red inestables para simular escenarios reales.
¡Ahora puedes crear reproductores robustos que manejen fallos con elegancia!