Détecter Safari à l'aide de jQuery

bien que tous deux soient des navigateurs Webkit, Safari urlencodes guillemets dans L'URL tandis que Chrome ne le fait pas.

par conséquent, je dois distinguer entre ces deux dans JS.

de jQuery détection du navigateur docs marque "safari" comme obsolète.

y a-t-il une meilleure méthode ou est-ce que je m'en tiens à la valeur dépréciée pour le moment?

101
demandé sur AndreKR 2011-05-05 18:52:45

12 réponses

utilisant un mélange de feature detection et Useragent chaîne de caractères:

    var is_chrome = !!window.chrome && !is_opera;
    var is_explorer= typeof document !== 'undefined' && !!document.documentMode && !isEdge;
    var is_firefox = typeof window.InstallTrigger !== 'undefined';
    var is_safari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
    var is_opera = !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;

Utilisation:

if (is_safari) alert('Safari');

ou pour Safari seulement, utilisez ceci:

if ( /^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {alert('Its Safari');}
307
répondu Panos Kal. 2018-02-16 08:51:41

ce qui suit identifie Safari 3.0+ et le distingue du Chrome:

isSafari = !!navigator.userAgent.match(/Version\/[\d\.]+.*Safari/)
69
répondu brissmyr 2013-10-16 14:43:33

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

10
répondu user3107045 2013-12-16 11:05:57

Pour la vérification de Safari, j'ai utilisé ceci:

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

ça marche correctement.

7
répondu FlamyTwista 2012-08-31 09:46:15

apparemment, la seule solution fiable et acceptée serait de faire la détection des caractéristiques 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;
3
répondu AndreKR 2011-06-16 12:50:31

le seul moyen que j'ai trouvé est de vérifier si le navigateur.userAgent contient iPhone ou iPad word

if (navigator.userAgent.toLowerCase().match(/(ipad|iphone)/)) {
    //is safari
}
2
répondu ohrlando 2016-02-18 17:42:55

si vous vérifiez le navigateur, utilisez $.browser . Mais si vous vérifiez le support des fonctionnalités (recommandé), utilisez $.support .

vous ne devez pas utiliser $.navigateur pour activer / désactiver les fonctions sur la page. Raison étant son pas fiable et généralement tout simplement pas recommandé.

si vous avez besoin d'un support, je vous recommande modernizr .

1
répondu John Strickler 2011-05-05 14:59:27

fonction générique

 getBrowseActive = function (browserName) {
   if (navigator.userAgent.indexOf(browserName) > -1)
     return true;

   return false;
 };
0
répondu user1330204 2014-07-15 20:49:07
//Check if Safari
  function isSafari() {
      return /^((?!chrome).)*safari/i.test(navigator.userAgent);
  }
//Check if MAC
     if(navigator.userAgent.indexOf('Mac')>1){
        alert(isSafari());
     }

http://jsfiddle.net/s1o943gb/10 /

0
répondu Code Spy 2015-08-27 17:29:23

un moyen très utile de corriger cela est de détecter la version WebKit des navigateurs et de vérifier si elle est au moins celle dont nous avons besoin, sinon faire quelque chose d'autre.

en utilisant jQuery il va comme ceci:

"use strict";

$(document).ready(function() {
    var appVersion                  = navigator.appVersion;
    var webkitVersion_positionStart = appVersion.indexOf("AppleWebKit/") + 12;
    var webkitVersion_positionEnd   = webkitVersion_positionStart + 3;
    var webkitVersion               = appVersion.slice(webkitVersion_positionStart, webkitVersion_positionEnd);
	
    console.log(webkitVersion);

    if (webkitVersion < 537) {
        console.log("webkit outdated.");
    } else {
        console.log("webkit ok.");
    };
});

cela fournit une solution sûre et permanente pour traiter les problèmes avec les différentes implémentations webkit du navigateur.

bon codage!

0
répondu reicek 2016-11-22 13:58:35

cela va déterminer si le navigateur est Safari ou non.

if(navigator.userAgent.indexOf('Safari') !=-1 && navigator.userAgent.indexOf('Chrome') == -1)
{
    alert(its safari);
}else {
    alert('its not safari');
}
0
répondu Dushyant Dagar 2017-11-17 11:54:37
    // Safari uses pre-calculated pixels, so use this feature to detect Safari
    var canva = document.createElement('canvas');
    var ctx = canva.getContext("2d");
    var img = ctx.getImageData(0, 0, 1, 1);
    var pix = img.data;     // byte array, rgba
    var isSafari = (pix[3] != 0);   // alpha in Safari is not zero
0
répondu Vitaly 2018-03-25 04:55:00