检测Safari浏览器

252

如何使用JavaScript检测Safari浏览器?我尝试了下面的代码,但它不仅检测到了Safari浏览器,还检测到了Chrome浏览器。

function IsSafari() {

  var is_safari = navigator.userAgent.toLowerCase().indexOf('safari/') > -1;
  return is_safari;

}

1
一些与文件提交相关的JS代码在Safari上运行不同,在Chrome上正常运行。 - Tomas
1
你几乎肯定应该测试API之间的任何差异。除了Safari和Chrome之外,还有其他基于WebKit的浏览器。 - Quentin
20
有很多原因可能希望检测浏览器。例如,截至本文撰写时,在Safari中某些SVG引擎的方面(如过滤器)已经损坏,但在Chrome中工作正常。 - Paul Legato
有时候你就是无法修复 bug,因为你无法重现它(我没有 Mac 访问权限)。我已经在 Midori 上解决了问题(一些 BlobBuilder/Blob 的 sendAsBinary shim 问题),但客户说文件上传仍然存在问题,所以我能想到的最好的办法就是删除 Safari 支持并使用 iframes(就像旧版 IE 一样)。 - llamerr
1
可能是重复的问题:如何检测Chrome和Safari浏览器(Webkit) - anik4e
23个回答

1
2023年版
if(navigator.userAgent.includes('Safari') && !navigator.userAgent.includes('Chrome')){
    // it's safari
    console.log('safari detected');
}

-1
我创建了一个返回布尔类型的函数:
export const isSafari = () => navigator.userAgent.toLowerCase().indexOf('safari') !== -1

-4
用户代理嗅探非常棘手且不可靠。我们试图使用类似于@qingu上面的答案来检测iOS上的Safari,对于Safari、Chrome和Firefox确实效果很好。但它错误地将Opera和Edge识别为Safari。
因此,我们采用了特性检测,因为截至今天,serviceWorker仅在Safari中受支持,在iOS上的任何其他浏览器中都不受支持。正如https://jakearchibald.github.io/isserviceworkerready/所述:

支持不包括该平台上第三方浏览器的iOS版本(请参见Safari支持)。

所以我们做了一些像这样的事情:
if ('serviceWorker' in navigator) {
    return 'Safari';
}
else {
    return 'Other Browser';
}

注意:未在MacOS上的Safari上进行测试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接