Qué hace
Al abrir esta página, un script hace unas 60 comprobaciones pequeñas en tu navegador actual y marca cada función como admitida o no. Los resultados se agrupan en lenguaje JavaScript, CSS, gráficos, multimedia y códecs, almacenamiento, red, API de dispositivos, seguridad e interfaz, y arriba aparece un resumen con la cantidad de funciones admitidas.
Cada comprobación es una pregunta que el navegador puede responder sin hacer nada visible. En JavaScript, eso suele significar ver si algo existe, como structuredClone o Promise.withResolvers, o si acepta una sintaxis más nueva, como una expresión regular con la bandera v. Las filas de CSS pasan por CSS.supports(), que indica si el motor de estilos entiende una propiedad, un valor o un selector como :has(). Las filas de códecs usan las respuestas del propio navegador a canPlayType() y a las comprobaciones de Media Source.
Ninguna comprobación abre una solicitud de permisos, inicia un selector de dispositivos ni envía nada por la red. En las API de hardware, como Web Bluetooth, WebUSB o Web NFC, «admitida» significa que el navegador expone la interfaz, no que haya un dispositivo conectado o autorizado.
Cómo usarla
- Abre la página exactamente en el navegador, el perfil y el dispositivo que te interesan. Las comprobaciones arrancan solas.
- Mira el total del resumen y después revisa cada grupo en busca de filas marcadas como no admitidas.
- En el grupo Multimedia, fíjate si algún códec aparece como parcial. Eso significa que el navegador respondió «maybe» en lugar de «probably».
- Pulsa el botón Copiar como texto para llevar toda la lista al portapapeles.
- Pégala en el reporte de error, el ticket o el chat, y agrega la versión del navegador y el sistema operativo si todavía no están.
Haz la prueba en la misma ventana donde ocurre el problema. Las extensiones, las políticas empresariales y las funciones experimentales (flags) pueden activar o desactivar funciones concretas.
Dos filas describen tanto la página como el navegador: el contexto seguro depende de cómo se cargó la página, y el aislamiento de origen cruzado, de los encabezados que envía el servidor, así que otro sitio puede obtener respuestas distintas en esas dos.
Casos de uso
- Tickets de soporte. Un cliente cuenta que al guardar un archivo grande no pasa nada. Pídele que abra esta página y pegue la lista copiada; si falta la fila del sistema de archivos privado del origen o la de Fetch con streams, el asunto puede quedar resuelto en una sola respuesta.
- Videos que no se reproducen. Un clip se reproduce en una laptop y en otra muestra un cuadro negro. Compara las filas de HEVC y AV1 en las dos; un no o un parcial es señal de que conviene ofrecer también una versión en H.264 o VP9.
- Decidir qué lanzar. Antes de depender de
:has(), las consultas de contenedor o el anidamiento de CSS, abre la página en los navegadores más antiguos que todavía usan tus usuarios, incluidos quioscos y smart TV. - Navegadores dentro de apps. Los enlaces que tocas en apps de chat y redes sociales suelen abrirse en una vista web integrada. Si abres esta página de esa forma, verás lo que admite esa vista, que puede ser distinto de lo que admiten Safari o Chrome en el mismo celular (móvil).
- Proyectos de hardware. Antes de decirles a tus usuarios que pueden flashear un microcontrolador o configurar un teclado desde una página web, pídeles que revisen las filas de Web Serial, WebUSB y WebHID; algunos navegadores importantes no tienen estas interfaces en absoluto.
Detección de funciones frente a leer el user agent
La costumbre antigua era leer la cadena del user agent y deducir las capacidades a partir del nombre del navegador. Eso falla de maneras previsibles. Los navegadores basados en Chromium comparten la mayor parte del texto de su user agent. Chrome en un iPhone lleva el token CriOS, pero normalmente renderiza con WebKit, así que en la mayoría de estas filas se comporta como Safari. Además, Chrome congeló parte de los datos de versión y de plataforma de su cadena, y cualquiera puede cambiarla en unos pocos clics.
La detección de funciones, en cambio, le pregunta al navegador que está corriendo, y eso también simplifica la mejora progresiva: construyes una base que funcione en todas partes y agregas la opción mejor solo donde la comprobación pasa.
if ('share' in navigator) {
shareButton.hidden = false; // menú nativo para compartir
} else {
copyLinkButton.hidden = false; // alternativa simple
}
@supports (container-type: inline-size) {
.card-list { container-type: inline-size; }
}
Con los códecs funciona igual. Un reproductor puede llamar a video.canPlayType('video/mp4; codecs="av01.0.05M.08"') y recurrir a una fuente H.264 cuando la respuesta es una cadena vacía, que es la forma en que el navegador dice que no. Las únicas otras respuestas posibles son «maybe» y «probably».
Por qué el mismo navegador puede responder distinto
Hardware y sistema operativo
Muchas filas dependen de algo más que la compilación del navegador. Reproducir HEVC suele requerir un decodificador por hardware o soporte de códecs del sistema operativo, así que la misma versión del navegador puede dar resultados distintos en dos laptops. Safari solo informa AV1 en dispositivos Apple con decodificador AV1 por hardware. WebGPU llegó a unos sistemas operativos antes que a otros, y un navegador puede desactivar WebGL cuando el controlador gráfico está en su lista de bloqueo. Algunas compilaciones de navegadores de código abierto no incluyen códecs con licencia, como H.264 y AAC.
Contextos seguros
Muchas API solo existen en un contexto seguro: páginas servidas por https, además de direcciones locales como http://localhost y http://127.0.0.1. Los Service Workers, la API asíncrona del portapapeles, Web Authentication, Web Share, Screen Wake Lock, WebGPU y las API de dispositivos están en este grupo. Si cargas el mismo sitio por http simple en una dirección de la red local, esos objetos no aparecen (no es que estén bloqueados), así que una función que anda en localhost puede desaparecer en un servidor de pruebas. window.isSecureContext indica el estado. El aislamiento de origen cruzado, que habilita SharedArrayBuffer, además requiere los encabezados de respuesta Cross-Origin-Opener-Policy y Cross-Origin-Embedder-Policy.
La lista también es una huella digital
Como los resultados varían según el navegador, la versión, el sistema operativo y el hardware, el patrón completo de respuestas acota qué configuración tiene un visitante. Por eso los scripts de huella digital hacen este mismo tipo de comprobaciones, junto con el renderizado de canvas y las fuentes instaladas. Esta página hace sus comprobaciones en local y no envía nada, e iseeu.cc no guarda registros de direcciones IP ni de consultas, pero cualquier sitio puede ejecutar código equivalente sin mostrarte el resultado. Antes de pegar la lista en un gestor de incidencias público, tómala como cualquier otro dato de tu sistema que compartes.
Preguntas frecuentes
¿Esta página me pide permiso para usar la cámara, el Bluetooth o las notificaciones?
No. Cada comprobación solo pregunta si una API existe o si el navegador dice admitir algo. Nada llama a un método que abra una solicitud de permiso o un selector de dispositivos, y ningún dato sale de tu navegador. La fila de la API de notificaciones, por ejemplo, comprueba que la API esté presente; no te pide permiso para mostrarte notificaciones. Además, iseeu.cc no usa cookies ni guarda registros de direcciones IP o de consultas.
Aquí dice que mi navegador admite una función, ¿por qué falla en mi sitio?
Que aparezca como admitida significa que el navegador expone la API o dice entender la sintaxis. El uso real puede fallar igual: tu sitio puede estar cargándose por http simple y perder las API que exigen un contexto seguro, un permiso puede estar denegado, una política puede bloquear un dispositivo o WebGPU puede no encontrar un adaptador gráfico utilizable. Las filas de códecs reflejan lo que el navegador afirma, y un perfil o una resolución poco comunes pueden fallar al decodificarse.
¿Qué significa «Parcial» en las filas de códecs?
El método canPlayType nunca responde que sí. Devuelve probably cuando el navegador está bastante seguro de poder reproducir el formato, maybe cuando lo reconoce pero no puede asegurarlo sin probar, y una cadena vacía para decir que no. Esta página muestra maybe como parcial. Toma un resultado parcial como motivo para hacer una prueba real de reproducción con tu propio archivo antes de depender de ese códec.
¿Por qué a un compañero le salen otros resultados con la misma versión del navegador?
Varias filas dependen del sistema operativo y del hardware más que de la versión del navegador. HEVC y AV1 suelen depender de decodificadores por hardware, la disponibilidad de WebGPU cambia según la plataforma y el controlador gráfico, y algunas compilaciones vienen sin códecs con licencia. Las extensiones, las políticas empresariales, las funciones experimentales y las ventanas privadas también pueden cambiar respuestas concretas. Comparar lado a lado las dos listas copiadas es la forma más rápida de encontrar la diferencia.
¿Por qué desaparecen algunas funciones si abro el sitio con http?
Los navegadores exponen muchas API recientes solo en contextos seguros, es decir, en páginas cargadas por https o desde direcciones locales como localhost. En una página con http simple, objetos como navigator.serviceWorker y navigator.clipboard sencillamente no están definidos. Es a propósito: estas API llegan a dispositivos, credenciales o código que corre mucho tiempo en segundo plano, y una página sin cifrar podría alterarse en el camino. Sirve tus entornos de prueba por https para ver el mismo comportamiento que en producción.
¿Pueden identificarme con esta lista?
Por sí sola, una lista de funciones admitidas describe tu navegador, tu sistema operativo y tu hardware, no a ti. Combinada con otras señales, como el tamaño de pantalla, las fuentes instaladas y el resultado del canvas, suma a una huella digital del navegador que puede ayudar a reconocer a un visitante que regresa. Esta página hace las pruebas en local y no envía nada, pero otros sitios pueden hacer las mismas pruebas sin avisarte, así que la exposición está en la combinación, no en esta lista por sí sola.
¿No es mejor revisar el user agent?
Para decidir si usar una función, no. Las cadenas de user agent se repiten entre los navegadores basados en Chromium, Chrome les recortó detalle, son fáciles de cambiar y engañan en el iPhone, donde Chrome y Firefox normalmente renderizan con WebKit. Probar la función directamente da la respuesta del navegador que de verdad está corriendo. Aun así, la cadena del user agent sirve en un reporte de error para dejar constancia de la versión exacta del navegador.
¿Cómo le paso estos resultados a soporte técnico?
Abre la página en el mismo navegador, perfil y dispositivo donde ocurre el problema, pulsa el botón Copiar como texto y pega la lista en el ticket, el reporte de error o el chat. Agrega la versión del navegador y el sistema operativo si todavía no aparecen. Antes de pegarla en un gestor de incidencias público, tómala como cualquier otro dato de tu sistema que compartes.
La detección muestra lo que el navegador expone o dice admitir. Aun así, cuando un sitio intenta usar una función de verdad, puede encontrarla desactivada por una política, por falta de hardware o por un permiso denegado.