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.share es undefined; el clic es una no-operación.
  • Fallo silencioso. iOS rechaza fuera de un gesto o contexto seguro con NotAllowedError/AbortError que 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ónWebViewRuntime propio del host
navigator.share en AndroidInexistenteHoja nativa
Compuerta de gesto/contexto seguro iOSFácil de errarManejado nativamente
Navegadores integrados (WeChat, etc.)Hoja eliminadaHoja nativa
Compartir archivosEstrecho, con canShareHoja nativa + archivos
RespaldoSolo copiar-enlaceObjetivos reales
ConsistenciaPor motorUniforme

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