Ich suche nach einer Möglichkeit, Safari mit Javascript zu erkennen. Ich weiß, dass es schon oft behandelt wurde, aber wahrscheinlich hat sich etwas geändert und es funktioniert nicht mehr. Zumindest in meinem Fall.

Folgendes mache ich:

<script>

    if(!isSafari()){
      alert('not Safari');
    } else {
      alert('I am Safari');
    }


    function isSafari(){    
      var is_safari = navigator.userAgent.indexOf("Safari") > -1;
      if(is_safari){
        return true;
      }
    }
  </script>

Jsbin: http://jsbin.com/ewerof/1

Wenn Sie diesen Code in Safari und Chrome ausführen, wird dieselbe Warnung "Ich bin Safari" angezeigt. Wie erkennt man also eigentlich nur Safari? Meine Safari-Version ist 4.0.3, nur für den Fall, dass dies wichtig ist.

4
devjs11 9 Okt. 2012 im 15:38

3 Antworten

Ich verwende eine neuere Version von Safari, dies sollte jedoch weiterhin gelten.

Safari User Agent:

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/536.26.14 (KHTML, like Gecko) Version/6.0.1 Safari/536.26.14

Chrome's User Agent

 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.79 Safari/537.4

Wie Sie sehen können, enthalten beide "Safari" (höchstwahrscheinlich, weil beide WebKit verwenden). Ihre Funktion sucht nur nach Safari. Ihre Funktion muss also nach "Safari" suchen und sicherstellen, dass die Zeichenfolge nicht "Chrome" enthält.

0
KTastrophy 9 Okt. 2012 im 11:44

Wenn Sie sich Ihren Benutzeragenten ansehen, werden Sie feststellen, dass er "Safari" in der Zeichenfolge enthält.

Your User Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.92 Safari/537.4

var xSAF = isSafari();

if(SAF)
{
    alert('Is Safari');
} else {
    alert('Not Safari');
}

function isSafari()
{
    var xUA = navigator.userAgent;
    if((xUA.indexOf("Safari")) && (xUA.indexOf("Chrome") == -1))
    {
        return true;
    } else {
        return false;
    }
}
0
CᴴᵁᴮᴮʸNᴵᴺᴶᴬ 9 Okt. 2012 im 11:52

Wenn Sie dies mit Chrome in eine Webentwicklerkonsole eingeben:

navigator.userAgent

Sie erhalten eine Zeichenfolge wie:

"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.92 Safari/537.4"

Diese Zeichenfolge enthält Safari, daher müssen Sie speziell prüfen, ob die Zeichenfolge auch Chrom enthält. Sie können dafür einen einfachen Einzeiler verwenden:

var is_safari = /^(?!.*chrome).*safari/i.test(navigator.userAgent);
2
David Hellsing 9 Okt. 2012 im 11:48