4

我正在寻找一种使用 javascript 检测 Safari 的方法。我知道它已经被覆盖了很多次,但可能有些东西已经改变了,它不再起作用了。至少在我的情况下。

这是我所做的:

<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

如果您在 Safari 和 Chrome 中运行此代码,您将收到相同的警报“我是 Safari” 那么如何仅检测 Safari?我的 Safari 版本是 4.0.3,以防万一。

4

4 回答 4

14

Chrome 在 userAgent 字符串中同时具有“Chrome”和“Safari”。Safari 只有“Safari”。

所以这有效:

var is_chrome = navigator.userAgent.indexOf('Chrome') > -1; 
var is_explorer = navigator.userAgent.indexOf('MSIE') > -1; 
var is_firefox = navigator.userAgent.indexOf('Firefox') > -1; 
var is_safari = navigator.userAgent.indexOf("Safari") > -1; 
var is_Opera = navigator.userAgent.indexOf("Presto") > -1; 
if ((is_chrome)&&(is_safari)) {is_safari=false;} 

if (is_safari) alert('Safari');

或仅适用于 Safari,请使用以下命令:

if (navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1) {alert('Its Safari');} 

学分:卡巴玛鲁

于 2012-10-09T11:44:07.530 回答
2

如果您使用 Chrome 在 Web 开发人员控制台中键入此内容:

navigator.userAgent

你会得到一个字符串,比如:

"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"

该字符串包含Safari,因此您必须专门检查该字符串是否还包含 chrome。您可以为此使用简单的单线:

var is_safari = /^(?!.*chrome).*safari/i.test(navigator.userAgent);
于 2012-10-09T11:43:21.960 回答
0

我正在使用更新版本的 Safari,但这应该仍然适用。

Safari 的用户代理:

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 的用户代理

 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

如您所见,它们都包含“Safari”(很可能是由于它们都使用 WebKit)。您的函数仅检查 Safari。因此,您的函数需要检查“Safari”并确保字符串不包含“Chrome”。

于 2012-10-09T11:44:44.160 回答
0

如果您查看您的用户代理,您会看到它在字符串中包含“Safari”;

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;
    }
}
于 2012-10-09T11:45:59.227 回答