Tengo un PWA donde a los usuarios de Android se les pide que agreguen el PWA a su pantalla de inicio, pero también me gustaría mostrar una información sobre herramientas para los usuarios de Safari en iOS que muestran cómo agregar el PWA a su pantalla de inicio, ya que no es una función compatible para ellos. .
Estaba pensando en usar la detección de funciones, pero no puedo encontrar la manera de hacerlo, algo como:
if ("a2hs" in navigator) { // Do something for browsers supporting A2HS feature } else { // Show the tooltip if the browser does not support A2HS }También pensé que podría usar algo como esto:
const isIos = () => { return window.navigator.vendor === 'Apple Computer, Inc.'; }; pero esto también vuelve a ser true para los usuarios de Chrome en iOS :(
¿Alguna idea de cómo puedo detectar si un usuario está usando Safari en iOS?
Nota: También quiero evitar el uso de la detección de agente de usuario . Creo que leí casi todos los temas relacionados con este tema en SO, pero hasta ahora no pude encontrar ninguna solución que no use el olfateo del agente de usuario.
una solución parcial:
if('BeforeInstallPromptEvent' in window) alert('Chrome-style PWA install experience supported!'); if('standalone' in navigator) // only available on iOS - but also on alternative browsers on iOS without Add-to-Homescreen support alert('iOS Safari-style PWA Add-to-Homescreen maybe supported!');Problemas abiertos:
navigator.userAgent.match(/(iOS|OPT|Brave|GSA|DuckDuckGo|Snapchat)\//) para detectar la mayoría de los navegadores alternativos; Para una explicación: iOS en la expresión regular debe detectar CriOS|FxiOS|EdgiOS|OPiOS (Chrome/Firefox/Edge/Opera mini); ¿Alguien tiene una forma de detectar navegadores alternativos en iOS sin usar el agente de usuario?Adición (no probada y poco confiable): investigué un poco más:
navigator.mediaDevices.getUserMedia o tal vez navigator.mediaDevices no está definido. Pero también leí que Apple lo implementó hace algunos meses, por lo que habrá vistas web para las que esto no sea cierto.navigator.doNotTrack no está definido, podría significar que está en una vista web (o que Apple decidió eliminar esta propiedad obsoleta de Safari...)