如何检测Safari浏览器使用JavaScript?我尝试了下面的代码,它不仅检测Safari浏览器,而且还检测Chrome浏览器。
function IsSafari() {
var is_safari = navigator.userAgent.toLowerCase().indexOf('safari/') > -1;
return is_safari;
}
如何检测Safari浏览器使用JavaScript?我尝试了下面的代码,它不仅检测Safari浏览器,而且还检测Chrome浏览器。
function IsSafari() {
var is_safari = navigator.userAgent.toLowerCase().indexOf('safari/') > -1;
return is_safari;
}
当前回答
正如其他人已经注意到的,特性检测比检查特定浏览器更受欢迎。一个原因是用户代理字符串可以更改。另一个原因是字符串可能会在新版本中更改并破坏代码。
如果您仍然想要测试任何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。
Edit
要在当前浏览器中测试:https://jsfiddle.net/j5hgcbm2/
编辑2
根据Chrome文档更新,以正确检测iOS上的Chrome
值得注意的是,iOS上的所有浏览器都只是Safari的包装,使用相同的引擎。看到bfred。这是他在这个帖子里对自己的回答的评论。
编辑3
根据Firefox文档更新,以正确检测iOS上的Firefox
其他回答
阅读了许多答案和帖子,并确定了最准确的解决方案。在Safari, Chrome, Firefox和Opera(桌面和iOS版本)中进行测试。首先,我们需要检测苹果供应商,然后排除Chrome, Firefox和Opera(用于iOS)。
let isSafari = navigator.vendor.match(/apple/i) &&
!navigator.userAgent.match(/crios/i) &&
!navigator.userAgent.match(/fxios/i) &&
!navigator.userAgent.match(/Opera|OPT\//);
if (isSafari) {
// Safari browser is used
} else {
// Other browser is used
}
正如其他人已经注意到的,特性检测比检查特定浏览器更受欢迎。一个原因是用户代理字符串可以更改。另一个原因是字符串可能会在新版本中更改并破坏代码。
如果您仍然想要测试任何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。
Edit
要在当前浏览器中测试:https://jsfiddle.net/j5hgcbm2/
编辑2
根据Chrome文档更新,以正确检测iOS上的Chrome
值得注意的是,iOS上的所有浏览器都只是Safari的包装,使用相同的引擎。看到bfred。这是他在这个帖子里对自己的回答的评论。
编辑3
根据Firefox文档更新,以正确检测iOS上的Firefox
注意:总是尝试检测您试图修复的特定行为,而不是针对它与isSafari?
作为最后的手段,用下面的正则表达式检测Safari:
var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
它使用负环视,排除Chrome、Edge和所有在用户代理中包含Safari名称的Android浏览器。
只使用:
var isSafari = window.safari !== undefined;
if (isSafari) console.log("Safari, yeah!");
注意,这对于移动版本的Safari可能不可靠。
因为chrome和safari的userAgent几乎是相同的,所以可以更容易地查看浏览器的供应商
Safari
navigator.vendor == "Apple Computer, Inc."
铬
navigator.vendor == "Google Inc."
FireFox(为什么是空的?)
navigator.vendor == ""
IE(为什么没有定义?)
navigator.vendor == undefined