En Android System WebView la Web Share API simplemente no existe: navigator.share es undefined. En iOS solo existe detrás de un gesto del usuario, un contexto seguro y una política de funciones que los navegadores integrados suelen eliminar. La página no puede abrir la hoja de compartir del sistema, así que el botón de compartir falla o cae en silencio a copiar-enlace. Un runtime propio del host expone un puente de compartir nativo real: una hoja, todos los motores, todos los navegadores integrados.
navigator.share no está ausente, es inexistente
La Web Share API funciona en Chrome, Edge, Safari y Samsung Browser. Pero no en Android System WebView. La tabla de compatibilidad de MDN es explícita: en «WebView Android» la Web Share API está marcada como No. Un plugin de Tauri confirma lo mismo —«La Web Share API (navigator.share) no es compatible con Android WebView, aunque está basada en Chromium». Así que un botón de compartir hecho a la especificación no hace nada: if (navigator.share) es falso, el manejador nunca se ejecuta y la función es invisible.
iOS es compatible pero muy condicionado
En iOS, WKWebView admite Web Share desde iOS 14 — pero solo cuando se cumplen todas las condiciones. La llamada debe estar dentro de un manejador de activación del usuario como un click; esperar cualquier fetch o analítica antes de share() descarta la activación y la llamada se rechaza con NotAllowedError. Requiere un contexto seguro (https — http:// y la mayoría de orígenes file:// no exponen la API). Dentro de un iframe necesita allow="share". Y los navegadores integrados — WeChat, TikTok, Instagram — a menudo no implementan la hoja o eliminan la política de permisos, así que el mismo código que funciona en Safari falla allí.
Qué se rompe cuando desaparece la hoja
- El botón no hace nada. En Android WebView
navigator.shareesundefined; el clic es una no-operación. - Fallo silencioso. iOS rechaza fuera de un gesto o contexto seguro con
NotAllowedError/AbortErrorque la página ni siquiera espera. - Copiar-enlace es el único respaldo. Perder la hoja del sistema significa perder cada red social, mensajero y AirDrop — una experiencia degradada que el usuario nota.
- Los navegadores integrados divergen. WeChat/TikTok/Instagram omiten la hoja en silencio mientras Safari funciona, así que probar en Safari oculta la falla real.
- Compartir archivos es aún más estrecho.
canShare({ files })devuelve falso en motores que no pueden compartir archivos, forzando otra rama.
La solución del runtime
Un runtime propio del host controla la intención de compartir. El host registra un puente de compartir nativo y abre la hoja real del sistema — UIActivityViewController en iOS, Intent.ACTION_SEND con Intent.createChooser() en Android — llevando título, texto, URL y archivos en todos los motores y navegadores integrados. La página llama a un puente uniforme; el runtime decide cómo presentarlo. Una superficie de compartir, en todas partes.
| Dimensión | WebView | Runtime propio del host |
|---|---|---|
navigator.share en Android | Inexistente | Hoja nativa |
| Compuerta de gesto/contexto seguro iOS | Fácil de errar | Manejado nativamente |
| Navegadores integrados (WeChat, etc.) | Hoja eliminada | Hoja nativa |
| Compartir archivos | Estrecho, con canShare | Hoja nativa + archivos |
| Respaldo | Solo copiar-enlace | Objetivos reales |
| Consistencia | Por motor | Uniforme |
Una app nativa abre la hoja del sistema en cada teléfono. Un WebView común casi en ninguno. Un runtime le da a la página una hoja — y todos los objetivos detrás de ella.
Fuentes
- MDN — Web Share API — la tabla de compatibilidad que marca «WebView Android: No» para
navigator.share. - web.dev — Web Share API — las reglas de activación de usuario, contexto seguro y
canShareque condicionan el compartir. - OpenPWA — Referencia de Web Share API — por qué aparecen
NotAllowedError/InvalidStateErrory cómo retroceder a copiar-enlace. - Apple — Web Share en WKWebView — el soporte en iOS WebView y las restricciones de gesto/contexto seguro.
- Plugin Tauri — por qué Android WebView carece de navigator.share — un mantenedor confirma que la API está ausente en Android System WebView aunque está basada en Chromium.