Como detectar o navegador Safari usando JavaScript? Eu tentei o código abaixo e ele detecta não apenas o Safari, mas também o navegador Chrome.
function IsSafari() {
var is_safari = navigator.userAgent.toLowerCase().indexOf('safari/') > -1;
return is_safari;
}
javascript
browser-detection
Tomas
fonte
fonte
Respostas:
Você pode facilmente usar o índice do Chrome para filtrar o Chrome:
fonte
Nota: tente sempre detectar o comportamento específico que você está tentando corrigir, em vez de segmentá-lo com
isSafari?
Como último recurso, detecte o Safari com este regex:
Ele usa pesquisas negativas e exclui Chrome, Edge e todos os navegadores Android que incluem o
Safari
nome em seu agente de usuário.fonte
Como outras pessoas já observaram, a detecção de recursos é preferível à verificação de um navegador específico. Uma razão é que a sequência do agente do usuário pode ser alterada. Outro motivo é que a string pode mudar e quebrar seu código em versões mais recentes.
Se você ainda quiser fazer o teste e testar qualquer versão do Safari, sugiro usar este
Isso funcionará com qualquer versão do Safari em todos os dispositivos: Mac, iPhone, iPod, iPad.
Editar
Para testar no seu navegador atual: https://jsfiddle.net/j5hgcbm2/
Editar 2
Atualizado de acordo com os documentos do Chrome para detectar o Chrome no iOS corretamente
Vale ressaltar que todos os navegadores no iOS são apenas invólucros para o Safari e usam o mesmo mecanismo. Veja o comentário do bfred.it sobre sua própria resposta neste tópico.
Editar 3
Atualizado de acordo com os documentos do Firefox para detectar corretamente o Firefox no iOS
fonte
isSafari
estarátrue
em um navegador Safari,false
caso contrário. Você pode simplesmente usar o snippet acima e, em seguida, usar o seu quase como o publicou.if (isSafari) { do_this(); } else { do_that(); }
.&& !navigator.userAgent.match('FxiOS')
similar ao Chrome check - ref ( developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent/... )Apenas use:
fonte
getUserMedia
.Este código é usado para detectar apenas o navegador safari
fonte
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)
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.34 Safari/534.24
Como o userAgent para chrome e safari é quase o mesmo, pode ser mais fácil procurar o fornecedor do navegador
Safári
cromada
FireFox (por que está vazio?)
IE (por que é indefinido?)
fonte
Somente Safari sem o Chrome:
Depois de tentar outros códigos, não encontrei nenhum que funcionasse com versões novas e antigas do Safari.
Finalmente, eu fiz esse código que está funcionando muito bem para mim:
fonte
Eu observei que apenas uma palavra distingue o Safari - "Versão". Portanto, esse regex funcionará perfeitamente:
fonte
Não sei por que o OP queria detectar o Safari, mas, no caso raro, você precisa farejar o navegador hoje em dia, é provavelmente mais importante detectar o mecanismo de renderização do que o nome do navegador. Por exemplo, no iOS, todos os navegadores usam o mecanismo Safari / Webkit, portanto, é inútil obter "chrome" ou "firefox" como nome do navegador se o renderizador subjacente for de fato o Safari / Webkit. Não testei esse código com navegadores antigos, mas funciona com tudo relativamente recente no Android, iOS, OS X, Windows e Linux.
Esclarecer:
fonte
Eu uso isso
fonte
Resposta mais simples:
fonte
navigator.vendor.toLowerCase().indexOf('apple') > -1
if (navigator.vendor.match(/apple/i)) { ... }
.Para os registros, a maneira mais segura que encontrei é implementar a parte do Safari do código de detecção de navegador com esta resposta :
Obviamente, a melhor maneira de lidar com problemas específicos do navegador é sempre a detecção de recursos, se possível. Usar um pedaço de código como o acima é, no entanto, ainda melhor que a detecção de cadeias de agentes.
fonte
Sei que essa pergunta é antiga, mas pensei em postar a resposta de qualquer maneira, pois isso pode ajudar alguém. As soluções acima estavam falhando em alguns casos extremos, então tivemos que implementá-lo de uma maneira que lidasse com iOS, Desktop e outras plataformas separadamente.
fonte
Regex modificado para a resposta acima
fonte
Esse "problema" único é 100% sinal de que o navegador é Safari (acredite ou não).
Isso significa que o descritor de objeto de cookie é definido como false no Safari, enquanto o outro é verdadeiro, o que realmente está me causando dor de cabeça no outro projeto. Feliz codificação!
fonte
Talvez isso funcione:
EDIT: NÃO FUNCIONA MAIS
fonte
Eu crio uma função que retorna o tipo booleano:
fonte
Farejar o agente do usuário é realmente complicado e não confiável. Estávamos tentando detectar o Safari no iOS com algo como a resposta do @ qingu acima, funcionou muito bem no Safari, Chrome e Firefox. Mas detectou falsamente o Opera e o Edge como Safari.
Por isso, optamos pela detecção de recursos, como parece hoje,
serviceWorker
só é suportada no Safari e não em qualquer outro navegador no iOS. Conforme declarado em https://jakearchibald.github.io/isserviceworkerready/Então fizemos algo como
Nota : Não testado no Safari no MacOS.
fonte