使用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()); }
解决这个问题的一个非常有用的方法是检测浏览器的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."); }; });