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?
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');}
ce qui suit identifie Safari 3.0+ et le distingue du Chrome:
isSafari = !!navigator.userAgent.match(/Version\/[\d\.]+.*Safari/)
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
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.
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;
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
}
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 .
fonction générique
getBrowseActive = function (browserName) {
if (navigator.userAgent.indexOf(browserName) > -1)
return true;
return false;
};
//Check if Safari
function isSafari() {
return /^((?!chrome).)*safari/i.test(navigator.userAgent);
}
//Check if MAC
if(navigator.userAgent.indexOf('Mac')>1){
alert(isSafari());
}
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!
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');
}
// 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