¿Cómo detectar el navegador Safari usando JavaScript? He probado el código a continuación y detecta no solo Safari sino también el navegador Chrome.
function IsSafari() {
var is_safari = navigator.userAgent.toLowerCase().indexOf('safari/') > -1;
return is_safari;
}
Respuestas:
Puede usar fácilmente el índice de Chrome para filtrar Chrome:
fuente
Nota: siempre trate de detectar el comportamiento específico que está tratando de corregir, en lugar de apuntarlo con
isSafari?
Como último recurso, detecta Safari con esta expresión regular:
Utiliza búsquedas negativas y excluye Chrome, Edge y todos los navegadores de Android que incluyen el
Safari
nombre en su agente de usuario.fuente
Como otras personas ya han notado, la detección de características es preferible a la verificación de un navegador específico. Una razón es que la cadena del agente de usuario puede modificarse. Otra razón es que la cadena puede cambiar y romper su código en versiones más nuevas.
Si todavía quieres hacerlo y probar cualquier versión de Safari, te sugiero que uses esto
Esto funcionará con cualquier versión de Safari en todos los dispositivos: Mac, iPhone, iPod, iPad.
Editar
Para probar en su navegador actual: https://jsfiddle.net/j5hgcbm2/
Editar 2
Actualizado de acuerdo con los documentos de Chrome para detectar Chrome en iOS correctamente
Vale la pena señalar que todos los navegadores en iOS son solo envoltorios para Safari y usan el mismo motor. Vea el comentario de bfred.it sobre su propia respuesta en este hilo.
Editar 3
Actualizado de acuerdo con los documentos de Firefox para detectar Firefox en iOS correctamente
fuente
isSafari
estarátrue
en un navegador Safari, de lofalse
contrario. Simplemente puede usar el fragmento anterior y luego usar el suyo casi como lo publicó.if (isSafari) { do_this(); } else { do_that(); }
.&& !navigator.userAgent.match('FxiOS')
similar al cheque de Chrome - ref ( developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent/… )Solo usa:
fuente
getUserMedia
.Este código se usa para detectar solo el navegador safari
fuente
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36 OPR/24.0.1558.51 (Edition Next)
o Stock Stock browser:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.34 Safari/534.24
Debido a que userAgent para Chrome y Safari son casi iguales, puede ser más fácil mirar al proveedor del navegador
Safari
Cromo
Firefox (¿por qué está vacío?)
IE (¿por qué no está definido?)
fuente
Solo Safari sin Chrome:
Después de probar otros códigos, no encontré ninguno que funcione con versiones nuevas y antiguas de Safari.
Finalmente, hice este código que me funciona muy bien:
fuente
Observé que solo una palabra distingue Safari - "Versión". Entonces esta expresión regular funcionará perfectamente:
fuente
No sé por qué el OP quería detectar Safari, pero en el raro caso de que necesite rastrear el navegador hoy en día es probablemente más importante detectar el motor de renderizado que el nombre del navegador. Por ejemplo, en iOS todos los navegadores utilizan el motor Safari / Webkit, por lo que no tiene sentido obtener "Chrome" o "Firefox" como nombre del navegador si el procesador subyacente es de hecho Safari / Webkit. No he probado este código con navegadores antiguos, pero funciona con todo lo bastante reciente en Android, iOS, OS X, Windows y Linux.
Para aclarar:
fuente
yo uso esto
fuente
La respuesta más simple:
fuente
navigator.vendor.toLowerCase().indexOf('apple') > -1
if (navigator.vendor.match(/apple/i)) { ... }
.Para los registros, la forma más segura que he encontrado es implementar la parte Safari del código de detección del navegador a partir de esta respuesta :
Por supuesto, la mejor manera de lidiar con problemas específicos del navegador es siempre mediante la detección de características, si es posible. Sin embargo, usar un código como el anterior es aún mejor que la detección de cadenas de agente.
fuente
Sé que esta pregunta es antigua, pero pensé en publicar la respuesta de todos modos, ya que puede ayudar a alguien. Las soluciones anteriores fallaban en algunos casos extremos, por lo que tuvimos que implementarlo de una manera que maneje iOS, escritorio y otras plataformas por separado.
fuente
Regex modificado para la respuesta anterior
fuente
Este "problema" único es 100% signo de que el navegador es Safari (lo creas o no).
Esto significa que el descriptor de objeto de cookie está establecido en falso en Safari, mientras que en el resto es cierto, lo que en realidad me está dando dolor de cabeza en el otro proyecto. ¡Feliz codificación!
fuente
Quizás esto funciona:
EDITAR: NO TRABAJAR MÁS
fuente
Creo una función que devuelve el tipo booleano:
fuente
El rastreo de agentes de usuario es realmente complicado y poco confiable. Intentábamos detectar Safari en iOS con algo como la respuesta de @ qingu anterior, funcionó bastante bien para Safari, Chrome y Firefox. Pero detectó falsamente Opera y Edge como Safari.
Así que optamos por la detección de funciones, ya que parece que hoy en día
serviceWorker
solo se admite en Safari y no en ningún otro navegador en iOS. Como se indica en https://jakearchibald.github.io/isserviceworkerready/Entonces hicimos algo como
Nota : No probado en Safari en MacOS.
fuente