如何检测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;
}
当前回答
简单的回答是:
function isSafari() {
if (navigator.vendor.match(/[Aa]+pple/g).length > 0 )
return true;
return false;
}
其他回答
我测试了#Christopher Martin发布的代码,它把我的浏览器报告为Chrome,因为它在测试Edge之前先测试了这一点,否则Edge会符合旨在识别Chrome的测试。我修改了他的回答,以纠正这一缺陷和其他两个缺陷,即:
Edge的缩写用户代理子字符串 MSIE的旧字符串
将代码转换为函数会产生以下通过调试控制台报告的函数和测试脚本。
<script type="text/javascript">
function BasicBrowserSniffer ( )
{
if ( navigator.userAgent.match ( /edge\//i ) ) {
return 'edge/edgehtml';
}
if ( navigator.userAgent.match ( /edg\//i ) ) {
return 'edge/edgehtml';
}
else if ( navigator.vendor.match ( /google/i ) ) {
return 'chrome/blink';
}
else if ( navigator.vendor.match ( /apple/i ) ) {
return 'safari/webkit';
}
else if ( navigator.userAgent.match ( /firefox\//i ) ) {
return 'firefox/gecko';
}
else if ( navigator.userAgent.match ( /trident\//i ) ) {
return 'ie/trident';
}
else if ( navigator.userAgent.match ( /msie\//i ) ) {
return 'ie/trident';
}
else
{
return navigator.userAgent + "\n" + navigator.vendor;
}
}; // BasicBrowserSniffer function
console.info ( 'Entering function anonymous DocumentReady function' );
console.info ( 'User Agent String = ' + navigator.userAgent.toLowerCase ( ));
console.info ( 'User Agent Vendor = ' + var uav = navigator.vendor.toLowerCase ( );
console.info ( 'BasicBrowserSniffer = ' + BasicBrowserSniffer ( ) );
console.info ( 'Leaving function anonymous DocumentReady function' );
</script>
正如其他人已经注意到的,特性检测比检查特定浏览器更受欢迎。一个原因是用户代理字符串可以更改。另一个原因是字符串可能会在新版本中更改并破坏代码。
如果您仍然想要测试任何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
我不知道为什么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”
因为chrome和safari的userAgent几乎是相同的,所以可以更容易地查看浏览器的供应商
Safari
navigator.vendor == "Apple Computer, Inc."
铬
navigator.vendor == "Google Inc."
FireFox(为什么是空的?)
navigator.vendor == ""
IE(为什么没有定义?)
navigator.vendor == undefined
只使用:
var isSafari = window.safari !== undefined;
if (isSafari) console.log("Safari, yeah!");
注意,这对于移动版本的Safari可能不可靠。