it-swarm.com.de

Erkennen Sie Safari mit jQuery

Obwohl beide Browser auf Webkit basieren, werden in der URL in Urlencodes Anführungszeichen angegeben, in Chrome jedoch nicht.

Deshalb muss ich in JS zwischen diesen beiden unterscheiden.

jQuery-Browsererkennungsdokumente "Safari" als veraltet markieren.

Gibt es eine bessere Methode oder bleibe ich nur noch bei dem veralteten Wert?

104
AndreKR

Verwenden einer Mischung aus feature detection und Useragent:

    var is_opera = !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
    var is_Edge = navigator.userAgent.indexOf("Edge") > -1;
    var is_chrome = !!window.chrome && !is_opera && !is_Edge;
    var is_Explorer= typeof document !== 'undefined' && !!document.documentMode && !is_Edge;
    var is_firefox = typeof window.InstallTrigger !== 'undefined';
    var is_safari = /^((?!chrome|Android).)*safari/i.test(navigator.userAgent);

Verwendungszweck:
 if (is_safari) alert('Safari');

Oder verwenden Sie diese Option nur für Safari:

if ( /^((?!chrome|Android).)*safari/i.test(navigator.userAgent)) {alert('Its Safari');}
327
Panos Kal.

Folgendes identifiziert Safari 3.0 und unterscheidet es von Chrome:

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

leider erkennen die obigen Beispiele auch den Standardbrowser von Android als Safari, was jedoch nicht ..__ ist. Ich habe verwendet navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1 && navigator.userAgent.indexOf('Android') == -1

10
user3107045

Zur Überprüfung von Safari habe ich Folgendes verwendet:

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

Es funktioniert richtig.

7
FlamyTwista

Anscheinend wäre die einzige zuverlässige und akzeptierte Lösung die Funktionserkennung wie folgt:

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
AndreKR

Ich konnte nur herausfinden, ob navigator.userAgent iPhone oder iPad Word enthält

if (navigator.userAgent.toLowerCase().match(/(ipad|iphone)/)) {
    //is safari
}
2
ohrlando

Wenn Sie den Browser überprüfen, verwenden Sie $.browser. Wenn Sie jedoch die Unterstützung der Funktionen prüfen (empfohlen), verwenden Sie $.support.

Sie sollten $ .browser NICHT zum Aktivieren/Deaktivieren von Funktionen auf der Seite verwenden. Der Grund dafür ist nicht zuverlässig und wird im Allgemeinen einfach nicht empfohlen.

Wenn Sie Funktionsunterstützung benötigen, empfehle ich modernizr .

1
John Strickler

Dies bestimmt, ob der Browser Safari ist oder nicht.

if(navigator.userAgent.indexOf('Safari') !=-1 && navigator.userAgent.indexOf('Chrome') == -1)
{
    alert(its safari);
}else {
    alert('its not safari');
}
0
Dushyant Dagar
//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/s1o943de/10/

0
Code Spy

Ich benutze zum Erkennen der Apple Browser Engine diese einfache JavaScript-Bedingung:

 navigator.vendor.startsWith('Apple')
0
Daniel De León
    // 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
Vitaly

Generische FUNKTION

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

   return false;
 };
0
user1330204

Eine sehr nützliche Möglichkeit, dies zu beheben, besteht darin, die Webkit-Version des Browsers zu erkennen und zu prüfen, ob es sich zumindest um die Version handelt, die wir benötigen, oder etwas anderes.

Mit jQuery geht es so:

"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.");
    };
});

Dies bietet eine sichere und dauerhafte Lösung für die Behebung von Problemen mit den verschiedenen Webkit-Implementierungen des Browsers.

Viel Spaß beim Codieren!

0
reicek