使用jQuery检测Safari

尽pipe两者都是基于Webkit的浏览器,但是Safari没有在URL中引用引号,而Chrome却没有。

所以我需要在JS中区分这两个。

jQuery的浏览器检测文档将“safari”标记为已弃用。

有没有更好的方法,或者我现在坚持使用已弃用的值?

Chrome在userAgentstring中包含“ Chrome ”和“ Safari ”。
Safari只有“ Safari ”。

所以这个工作:

  var is_chrome = navigator.userAgent.indexOf('Chrome') > -1; var is_explorer = navigator.userAgent.indexOf('MSIE') > -1; var is_firefox = navigator.userAgent.indexOf('Firefox') > -1; var is_safari = navigator.userAgent.indexOf("Safari") > -1; var is_opera = navigator.userAgent.toLowerCase().indexOf("op") > -1; if ((is_chrome)&&(is_safari)) {is_safari=false;} if ((is_chrome)&&(is_opera)) {is_chrome=false;} 

用法:
if (is_safari) alert('Safari');

或仅适用于Safari,请使用以下命令:

 if (navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1) {alert('Its Safari');} 

以下标识Safari 3.0+并将其与Chrome区分开来:

 isSafari = !!navigator.userAgent.match(/Version\/[\d\.]+.*Safari/) 

不幸的是,上面的例子也将检测到Android的默认浏览器为Safari,而不是。 我使用了navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1 && navigator.userAgent.indexOf('Android') == -1

为了检查Safari我用这个:

 $.browser.safari = ($.browser.webkit && !(/chrome/.test(navigator.userAgent.toLowerCase()))); if ($.browser.safari) { alert('this is safari'); } 

它工作正常。

显然唯一可靠和可接受的解决scheme将是做这样的function检测:

 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; 

我发现的唯一方法是检查navigator.userAgent是否包含iPhone或iPad的单词

 if (navigator.userAgent.toLowerCase().match(/(ipad|iphone)/)) { //is safari } 

如果您正在浏览器中使用$.browser 。 但是,如果您正在检查function支持(推荐),然后使用$.support

您不应使用$ .browser启用/禁用页面上的function。 原因是它不可靠,一般不推荐。

如果你需要function支持,那么我推荐modernizr 。

通用function

  getBrowseActive = function (browserName) { if (navigator.userAgent.indexOf(browserName) > -1) return true; return false; }; 
 //Check if Safari function isSafari() { return /^((?!chrome).)*safari/i.test(navigator.userAgent); } //Check if MAC if(navigator.userAgent.indexOf('Mac')>1){ alert(isSafari()); } 

http://jsfiddle.net/s1o943gb/10/

解决这个问题的一个非常有用的方法是检测浏览器的webkit版本,并检查它是否至less是我们需要的,否则做别的。

使用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); console.log(webkitVersion); if (webkitVersion < 537) { console.log("webkit outdated."); } else { console.log("webkit ok."); }; });