javascript - saber - Detecta Safari usando jQuery
saber a que elemento se le dio click javascript (12)
Aparentemente, la única solución confiable y aceptada sería la detección de características como esta:
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;
Aunque ambos son navegadores basados en Webkit, Safari urlencodes comillas en la URL, mientras que Chrome no.
Por lo tanto, necesito distinguir entre estos dos en JS.
Los documentos de detección de navegador de jQuery marcan "safari" como obsoleto.
¿Hay un método mejor o simplemente me quedo con el valor en desuso por el momento?
Desafortunadamente, los ejemplos anteriores también detectarán el navegador predeterminado de Android como Safari, que no lo es. Utilicé navigator.userAgent.indexOf(''Safari'') != -1 && navigator.userAgent.indexOf(''Chrome'') == -1 && navigator.userAgent.indexOf(''Android'') == -1
Esto determinará si el navegador es Safari o no.
if(navigator.userAgent.indexOf(''Safari'') !=-1 && navigator.userAgent.indexOf(''Chrome'') == -1)
{
alert(its safari);
}else {
alert(''its not safari'');
}
FUNCIÓN GENÉRICA
getBrowseActive = function (browserName) {
if (navigator.userAgent.indexOf(browserName) > -1)
return true;
return false;
};
La única forma en que encontré es verificar si navigator.userAgent contiene una palabra para iPhone o iPad
if (navigator.userAgent.toLowerCase().match(/(ipad|iphone)/)) {
//is safari
}
Lo siguiente identifica a Safari 3.0+ y lo distingue de Chrome:
isSafari = !!navigator.userAgent.match(/Version//[/d/.]+.*Safari/)
Para verificar Safari, utilicé esto:
$.browser.safari = ($.browser.webkit && !(/chrome/.test(navigator.userAgent.toLowerCase())));
if ($.browser.safari) {
alert(''this is safari'');
}
Funciona correctamente
Si está revisando el navegador, use $.browser
. Pero si está revisando el soporte de características (recomendado), entonces use $.support
.
NO debe usar $ .browser para habilitar / deshabilitar características en la página. La razón es que no es confiable y generalmente no es recomendable.
Si necesita soporte de funciones, le recomiendo modernizr .
Una forma muy útil de solucionar esto es detectar la versión de webkit de los navegadores y verificar si es al menos la que necesitamos, o bien, hacer otra cosa.
Usando jQuery dice así:
"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.");
};
});
Esto proporciona una solución segura y permanente para tratar los problemas con las diferentes implementaciones de webkit del navegador.
Feliz codificación!
Usando una mezcla de feature detection
de feature detection
y cadena de Useragent
:
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;
Uso:
if (is_safari) alert(''Safari'');
O solo para Safari, usa esto:
if ( /^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {alert(''Its 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
//Check if Safari
function isSafari() {
return /^((?!chrome).)*safari/i.test(navigator.userAgent);
}
//Check if MAC
if(navigator.userAgent.indexOf(''Mac'')>1){
alert(isSafari());
}