检测 Safari 浏览器

IT技术 javascript browser-detection
2021-01-31 12:51:52

如何使用 JavaScript 检测 Safari 浏览器?我试过下面的代码,它不仅可以检测 Safari,还可以检测 Chrome 浏览器。

function IsSafari() {

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

}
6个回答

注意:始终尝试检测您要修复的特定行为,而不是针对它isSafari?

作为最后的手段,使用以下正则表达式检测 Safari:

var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);

它使用负面环视,不包括 Chrome、Edge 和所有Safari在其用户代理中包含该名称的Android 浏览器

这不起作用。如果我在 iPhone 上使用 Chrome 浏览器,我仍然如此。
2021-03-15 12:51:52
使用特征检测绝对是个好主意,但有些行为很难或几乎不可能测试,例如移动设备上的视频是否会自动全屏显示,这种情况只发生在 iPhone 和 iPod 上。要测试它,您需要加载一个视频并让用户播放它。
2021-03-17 12:51:52
这是因为 iOS 上的所有浏览器都只是 Safari 的包装器(Mini模式下的 Opera Mini 除外),包括 Chrome。这并不一定意味着他们将所有自的userAgent字符串到包装符合这个测试。您可能希望在 iOS 上单独检测 Chrome
2021-03-25 12:51:52
伙计,这对我有用!!!非常感谢.. navigator.userAgent 正在为 Windows 中的 Chrome 和 Mac 中的 Safari 返回“5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36”之类的值。
2021-03-26 12:51:52
现在固定。您绝对是对的,许多浏览器的问题在于它们包含其他名称,以免被遗漏。Like Edge 在其 UA 中同时包含 Chrome 和 Safari。由于这个原因,用户代理检查是不好的:浏览器改变,检查需要更新。不幸的是,没有完美的方法来检测浏览器,这总是一种猜测。
2021-04-09 12:51:52

您可以轻松地使用 Chrome 的索引来过滤掉 Chrome:

var ua = navigator.userAgent.toLowerCase(); 
if (ua.indexOf('safari') != -1) { 
  if (ua.indexOf('chrome') > -1) {
    alert("1") // Chrome
  } else {
    alert("2") // Safari
  }
}
Windows 10 中的 IE 11 UA 字符串还包含 Safari 和 Chrome
2021-03-16 12:51:52
@Flimm 有许多用于浏览器检测的合法用例。不要自以为知道提问者或回答者的意图。虽然包含您可能认为相关的有用提示很好,但这绝不是必需的。
2021-03-19 12:51:52
不起作用。目前在 iPhone 上输出 chrome UA 字符串,它甚至没有“chrome”这个词。
2021-03-22 12:51:52
被否决,作为不可靠的解决方案 - 下面有更好的答案。
2021-03-29 12:51:52
这不适用于包含“safari”但不包含“chrome”的 Android 浏览器:developers.whatismybrowser.com/useragents/explore/software_name/...
2021-03-30 12:51:52

正如其他人已经指出的那样,功能检测优于检查特定浏览器。原因之一是可以更改用户代理字符串。另一个原因是该字符串可能会在较新版本中更改并破坏您的代码。

如果您仍然想这样做并测试任何 Safari 版本,我建议您使用它

var isSafari = navigator.vendor && navigator.vendor.indexOf('Apple') > -1 &&
               navigator.userAgent &&
               navigator.userAgent.indexOf('CriOS') == -1 &&
               navigator.userAgent.indexOf('FxiOS') == -1;

这适用于所有设备的任何版本的 Safari:Mac、iPhone、iPod、iPad。

编辑

在您当前的浏览器中进行测试:https : //jsfiddle.net/j5hgcbm2/

编辑 2

根据Chrome 文档更新以正确检测 iOS 上的 Chrome

值得注意的是,iOS 上的所有浏览器都只是 Safari 的包装器并使用相同的引擎。请参阅 bfred.it 在此线程中对他自己的回答的评论。

编辑 3

根据Firefox 文档更新以正确检测 iOS 上的 Firefox

@qingu - 我不明白这个 javascript,我该怎么做 - if(safaribrowser) { do this } else { do that } 使用相同的代码什么值是 'var isSafari' 谢谢
2021-03-23 12:51:52
@Andras 对于 Firefox,您可以添加&& !navigator.userAgent.match('FxiOS')类似于 Chrome 检查 - ref ( developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent/... )
2021-03-24 12:51:52
@GAV:isSafaritrue在 Safari 浏览器中,false否则。您可以简单地使用上面的代码段,然后几乎在发布时使用您的代码段。if (isSafari) { do_this(); } else { do_that(); }.
2021-03-30 12:51:52
感谢您的评论 - 更新以正确检测 iOS 上的 Chrome
2021-04-04 12:51:52
不幸的是,除了功能检测之外,还有更多的理由试图找出浏览器。浏览器可以支持一个功能,但有问题(例如:IE10 中的画布错误,但相同的功能在 IE9 中有效)。此外,Firefox 的行为与基于 webkit 的浏览器不同,例如它如何响应鼠标移动。Apple 的 Safari 存在 Chrome 中不存在的回流错误。在执行某些计算密集型任务时,某些浏览器的性能也比其他浏览器高。
2021-04-07 12:51:52

只需使用:

var isSafari = window.safari !== undefined;
if (isSafari) console.log("Safari, yeah!");
不知道为什么这不是更高 - 这是完美的,简短的,简单的。由于缺少getUserMedia.
2021-03-19 12:51:52
这是确定桌面 safari 的完美方式,因为这不适用于移动设备
2021-03-20 12:51:52
这在 iPhone 11 Pro Max Simulator 13.5 中不起作用
2021-03-28 12:51:52
它对我不起作用。我在 mac 上使用 safari 版本 14.0 (15610.1.28.1.9, 15610)
2021-04-03 12:51:52
我应该注意,这仅适用于 macOS 上的 Safari,在我的情况下,这是完美的。谢谢!
2021-04-09 12:51:52

此代码仅用于检测 safari 浏览器

if (navigator.userAgent.search("Safari") >= 0 && navigator.userAgent.search("Chrome") < 0) 
{
   alert("Browser is Safari");          
}
折腾平台检测也许可以过滤掉特定的兼容性情况。
2021-03-27 12:51:52
我刚刚检查了六个第三方 iOS 浏览器,它们都欺骗了非常精确的 Safari User-Agent。
2021-03-30 12:51:52
我们应该始终尝试进行特征检测,并将浏览器检测作为最后的手段,因为后者更有可能破坏并阻止合法用户。任何根本没有提到特征检测的答案都会受到我的反对。
2021-04-08 12:51:52
此代码仅检测 webkit 浏览器是否不是 chrome。许多其他浏览器在他们的用户代理字符串中包含“safari”这个坏主意。例如,Opera:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36 OPR/24.0.1558.51 (Edition Next)或 Stock Android 浏览器:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.34 Safari/534.24
2021-04-09 12:51:52
所以这只会检测 Chrome。然而,我刚刚发现 Chrome 44 在 UA 中不再有 Chrome,而是 'CriOS' :(
2021-04-12 12:51:52