如何检测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;
}
当前回答
我不知道为什么OP想要检测Safari,但在极少数情况下,您需要嗅探浏览器,可能更重要的是检测渲染引擎比浏览器的名称。例如,在iOS上,所有浏览器都使用Safari/Webkit引擎,所以如果底层渲染器实际上是Safari/Webkit,那么将“chrome”或“firefox”作为浏览器名称是毫无意义的。我还没有在旧的浏览器上测试这段代码,但它适用于最近的Android、iOS、OS X、Windows和Linux。
<script>
let browserName = "";
if(navigator.vendor.match(/google/i)) {
browserName = 'chrome/blink';
}
else if(navigator.vendor.match(/apple/i)) {
browserName = 'safari/webkit';
}
else if(navigator.userAgent.match(/firefox\//i)) {
browserName = 'firefox/gecko';
}
else if(navigator.userAgent.match(/edge\//i)) {
browserName = 'edge/edgehtml';
}
else if(navigator.userAgent.match(/trident\//i)) {
browserName = 'ie/trident';
}
else
{
browserName = navigator.userAgent + "\n" + navigator.vendor;
}
alert(browserName);
</script>
澄清:
iOS下的所有浏览器都会报告为“safari/webkit” 除Firefox外,Android下的所有浏览器都将报告为“chrome/blink” Chrome, Opera, Blisk, Vivaldi等在Windows, OS X或Linux下都将被报告为“Chrome /blink”
其他回答
我创建了一个返回布尔类型的函数:
export const isSafari = () => navigator.userAgent.toLowerCase().indexOf('safari') !== -1
我发现只有一个词可以区分Safari——“版本”。所以这个正则表达式将完美工作:
/.*Version.*Safari.*/.test(navigator.userAgent)
阅读了许多答案和帖子,并确定了最准确的解决方案。在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
}
为上面的答案修改正则表达式
var isSafari = /^((?!chrome|android|crios|fxios).)*safari/i.test(navigator.userAgent);
低温-铬 fxios - Firefox
为了记录,我发现最安全的方法是实现下面答案中的浏览器检测代码的Safari部分:
const isSafari = window['safari'] && safari.pushNotification &&
safari.pushNotification.toString() === '[object SafariRemoteNotification]';
当然,如果可能的话,处理特定于浏览器的问题的最佳方法总是进行特性检测。不过,使用上面这样的一段代码仍然比代理字符串检测要好。