Javascript navigator.userAgent

Javascript navigator.userAgent,javascript,Javascript,我正在尝试检测浏览器是否为Safari。如果是这样,那就做点什么吧。在所有其他浏览器中,执行其他操作: if ( navigator.userAgent.toLowerCase().indexOf('safari') == -1) { //if safari execute some function } else { // if other browsers execute other function } 然而,我想我没有使用正确的方法,因为它不起作用PQuirksmode有

我正在尝试检测浏览器是否为Safari。如果是这样,那就做点什么吧。在所有其他浏览器中,执行其他操作:

if ( navigator.userAgent.toLowerCase().indexOf('safari') == -1) {
    //if safari execute some function
} else {
   // if other browsers execute other function
}
然而,我想我没有使用正确的方法,因为它不起作用P

Quirksmode有一个可用于检测正在使用的不同浏览器,然后根据该浏览器类型执行不同操作的

在引擎盖下,它基本上使用了与您尝试使用的相同的技术

在你的例子中,你实际上很接近。快速修复方法是将
==
更改为
=瞧,你的脚本应该可以用了

不过,我运行的是Chrome,不是Safari!然而,在我的用户代理字符串中,我看到了以下内容:

"Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.10 
      (KHTML, like Gecko) Chrome/8.0.552.224 Safari/534.10"
“Safari”一词出现在我的userAgent字符串中,这意味着,使用您的脚本,我的浏览器将被视为Safari

我最终使用了

if(typeof navigator.vendor!='undefined') &&
   navigator.vendor.toLowerCase().indexOf('apple')!=-1){
    ...
}
var isSafari = navigator.userAgent.match(/safari/i) != null && navigator.userAgent.match(/chrome/i) == null;

if(isSafari){
    // code here
  }

应该是
=。永远不要依赖于浏览器检测,而是功能检测。通常有一种比嗅探用户代理更好的方法。您希望在safari中做什么不同的事情?嗅探浏览器的一个很好的理由是,您可以解决特定于浏览器的错误。例如,我正在解决一个Safari错误,该错误在GET中存在范围标头时不正确地缓存资源。Safari和Chrome对JS的解释几乎完全相同,因为它们都是webkit浏览器。@JCOC611-非常正确!我不是在反驳这个事实,只是如果OP只想在Safari而不是Chrome中运行某些东西,那么他试图做的事情是行不通的。我没有对他想做什么做任何假设。我完全同意你们两个,只是指出了这一点。chrome的userAgeint包含“Safari”,因此从技术上讲,这与检查“webkit”是一样的。@JCOC611如果我在这里有点迂腐,很抱歉,webkit是一个渲染引擎。Chrome和Safari使用两种不同的JavaScript引擎,因此它们都使用WebKit这一事实与它们运行JavaScript的方式没有多大关系。@Cam-不,相信我,你不是唯一的一个。在OSX上,Chrome的userAgent字符串中仍然有“apple”,所以这对我来说不起作用