124 votes

Détecter Safari, Chrome, IE, Firefox, Opera (avec un agent utilisateur)

Bien que tous deux soient des navigateurs Webkit, Safari urlencode les guillemets dans l'URL, contrairement à Chrome.

Par conséquent, je dois faire la distinction entre les deux dans JS.

Les documents de détection du navigateur de jQuery marquent "safari" comme obsolète.

Existe-t-il une meilleure méthode ou dois-je m'en tenir à la valeur obsolète pour l'instant?

355voto

Kabamaru Points 2563

Chrome contient à la fois " Chrome " et " Safari " dans la chaîne userAgent.
Safari a seulement ' Safari '.

Donc ça marche:

 var is_chrome = navigator.userAgent.indexOf('Chrome') > -1;
var is_explorer = navigator.userAgent.indexOf('MSIE') > -1;
var is_firefox = navigator.userAgent.indexOf('Firefox') > -1;
var is_safari = navigator.userAgent.indexOf("Safari") > -1;
var is_Opera = navigator.userAgent.indexOf("Presto") > -1;
if ((is_chrome)&&(is_safari)) {is_safari=false;}
 

if (is_safari) alert ('Safari');

Ou pour Safari uniquement, utilisez ceci:

 if (navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1) {alert('Its Safari');}
 

79voto

brissmyr Points 106

Les éléments suivants identifient Safari 3.0+ et le distinguent de Chrome:

 isSafari = !!navigator.userAgent.match(/Version\/[\d\.]+.*Safari/)
 

10voto

user3107045 Points 31

Malheureusement, les exemples ci-dessus détecteront également le navigateur par défaut d'Android comme Safari, ce qui n'est pas le cas. J'ai utilisé navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1 && navigator.userAgent.indexOf('Android') == -1

7voto

tranzistoria Points 71

Pour vérifier Safari, j'ai utilisé ceci:

 $.browser.safari = ($.browser.webkit && !(/chrome/.test(navigator.userAgent.toLowerCase())));
if ($.browser.safari) {
    alert('this is safari');
}
 

Cela fonctionne correctement

3voto

AndreKR Points 12941

Apparemment, la seule solution fiable et acceptée serait de faire la détection de fonctionnalités comme ceci:

 browser_treats_urls_like_safari_does = false;
var last_location_hash = location.hash;
location.hash = '"blah"';
if (location.hash == '#%22blah%22')
    browser_treats_urls_like_safari_does = true;
location.hash = last_location_hash;
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X