使用jQuery检测Safari
尽管两者都是基于Webkit的浏览器,但Safari并未在URL中引用引号,而Chrome却没有。使用jQuery检测Safari
因此我需要在JS中区分这两个。
jQuery's browser detection docs将“safari”标记为不建议使用。
有没有更好的方法,或者我现在只坚持弃用的值?
使用的feature detection
混合和Useragent
字符串:
var is_chrome = !!window.chrome && !is_opera;
var is_explorer= typeof document !== 'undefined' && !!document.documentMode && !isEdge;
var is_firefox = typeof window.InstallTrigger !== 'undefined';
var is_safari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
var is_opera = !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
用法:
if (is_safari) alert('Safari');
或Safari浏览器只,用这个:
if (/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {alert('Its Safari');}
如果您正在检查浏览器使用$.browser
。但是,如果您正在检查功能支持(推荐),然后使用$.support
。
您不应该使用$ .browser来启用/禁用页面上的功能。原因是它不可靠,一般不推荐。
如果您需要功能支持,那么我建议您使用modernizr。
显然,唯一可靠的和接受的解决方案是做功能检测是这样的:
browser_treats_urls_like_safari_does = false;
var last_location_hash = location.hash;
location.hash = '"blah"';
if (location.hash == '#%22blah%22')
browser_treats_urls_like_safari_does = true;
location.hash = last_location_hash;
好戏,但不幸的是它不起作用。由于location.hash处理字符串的方式,相等(location.hash =='#%22blah%22')将不起作用。 :/ – 2011-10-14 12:45:04
特征检测是要走的路,但有一个更好的方法,它没有任何副作用。您的代码段可能会干扰依赖于散列更改事件的其他脚本。我将问题标记为[this]的副本(http://stackoverflow.com/a/9851769/938089?how-to-detect-safari-chrome-ie-firefox-and-opera-browser)。我已经在Safari 3.0-5.1.3(Mac和Windows)中创建和测试了该方法。这是一个单线:) – 2012-05-25 10:42:57
对于检查Safari浏览器我用这个:
$.browser.safari = ($.browser.webkit && !(/chrome/.test(navigator.userAgent.toLowerCase())));
if ($.browser.safari) {
alert('this is safari');
}
它正常工作。
以下标识Safari 3.0以上,并从Chrome中区分开来:
isSafari = !!navigator.userAgent.match(/Version\/[\d\.]+.*Safari/)
这一个为我工作的时候没有其他人,谢谢。 – andygoestohollywood 2013-12-05 10:55:03
只有这个作品 – fdrv 2016-04-06 08:33:31
这就是事情。 TNX! – 2016-06-21 17:32:42
不幸的是,上面的例子中还将检测Android的默认浏览器如Safari,它不是。 我用 navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1 && navigator.userAgent.indexOf('Android') == -1
泛型函数
getBrowseActive = function (browserName) {
if (navigator.userAgent.indexOf(browserName) > -1)
return true;
return false;
};
解决这个问题是检测浏览器的WebKit版本,并检查它是否是至少我们需要的一个,其他人做点别的一个非常有用的方法。
使用jQuery它是这样的:
"use strict";
$(document).ready(function() {
var appVersion = navigator.appVersion;
var webkitVersion_positionStart = appVersion.indexOf("AppleWebKit/") + 12;
var webkitVersion_positionEnd = webkitVersion_positionStart + 3;
var webkitVersion = appVersion.slice(webkitVersion_positionStart, webkitVersion_positionEnd);
\t
console.log(webkitVersion);
if (webkitVersion < 537) {
console.log("webkit outdated.");
} else {
console.log("webkit ok.");
};
});
这提供了一个安全和永久修复的处理与浏览器的不同webkit的实现问题。
快乐编码!
//Check if Safari
function isSafari() {
return /^((?!chrome).)*safari/i.test(navigator.userAgent);
}
//Check if MAC
if(navigator.userAgent.indexOf('Mac')>1){
alert(isSafari());
}
我发现被检查的navigator.userAgent包含iPhone或iPad字
if (navigator.userAgent.toLowerCase().match(/(ipad|iphone)/)) {
//is safari
}
这将决定浏览器是否为Safari或不是唯一的方式。
if(navigator.userAgent.indexOf('Safari') !=-1 && navigator.userAgent.indexOf('Chrome') == -1)
{
alert(its safari);
}else {
alert('its not safari');
}
不幸的是,不工作。在Chrome v66和Safari上测试。 – 2018-01-23 20:14:10
我不知道,如果坚持它是一个好主意,我还没有深入检查了这一点,虽然我只是浏览Chrome上的$ .browser文档和它的标志'$ .browser .safari === true'。 eeek。 – davin 2011-05-05 15:03:34
[如何检测Safari,Chrome,IE,Firefox和Opera浏览器]的可能重复(http://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-浏览器)**没有用户代理嗅探** ?. – 2012-05-25 10:44:46