尽管两者都是基于Webkit的浏览器,但Safari会在URL中用引号将引号引起来,而Chrome则不会。
因此,我需要在JS中区分这两者。
jQuery的浏览器检测文档将“ safari”标记为已弃用。
有没有更好的方法,或者我现在只是坚持不赞成使用的值?
尽管两者都是基于Webkit的浏览器,但Safari会在URL中用引号将引号引起来,而Chrome则不会。
因此,我需要在JS中区分这两者。
jQuery的浏览器检测文档将“ safari”标记为已弃用。
有没有更好的方法,或者我现在只是坚持不赞成使用的值?
Answers:
feature detection
和混合使用Useragent
:
var is_opera = !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
var is_Edge = navigator.userAgent.indexOf("Edge") > -1;
var is_chrome = !!window.chrome && !is_opera && !is_Edge;
var is_explorer= typeof document !== 'undefined' && !!document.documentMode && !is_Edge;
var is_firefox = typeof window.InstallTrigger !== 'undefined';
var is_safari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
用法:
if (is_safari) alert('Safari');
或仅适用于Safari,请使用以下命令:
if ( /^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {alert('Its Safari');}
(Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36)
以下内容可识别Safari 3.0+,并将其与Chrome区别开:
isSafari = !!navigator.userAgent.match(/Version\/[\d\.]+.*Safari/)
为了检查Safari,我使用了以下方法:
$.browser.safari = ($.browser.webkit && !(/chrome/.test(navigator.userAgent.toLowerCase())));
if ($.browser.safari) {
alert('this is safari');
}
它可以正常工作。
显然,唯一可靠且可以接受的解决方案是进行特征检测,如下所示:
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;
如果要检查浏览器的使用$.browser
。但是,如果您要检查功能支持(推荐),请使用$.support
。
您不应使用$ .browser启用/禁用页面上的功能。原因是它不可靠,通常不建议这样做。
如果您需要功能支持,那么我建议使用modernizr。
location.hash = '"blah"'; if (location.hash == '#%22blah%22') alert('is Safari');
?
//Check if Safari
function isSafari() {
return /^((?!chrome).)*safari/i.test(navigator.userAgent);
}
//Check if MAC
if(navigator.userAgent.indexOf('Mac')>1){
alert(isSafari());
}
解决此问题的一种非常有用的方法是检测浏览器的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);
console.log(webkitVersion);
if (webkitVersion < 537) {
console.log("webkit outdated.");
} else {
console.log("webkit ok.");
};
});
这为处理浏览器的不同Webkit实施中的问题提供了安全且永久的修复程序。
编码愉快!
// Safari uses pre-calculated pixels, so use this feature to detect Safari
var canva = document.createElement('canvas');
var ctx = canva.getContext("2d");
var img = ctx.getImageData(0, 0, 1, 1);
var pix = img.data; // byte array, rgba
var isSafari = (pix[3] != 0); // alpha in Safari is not zero
$.browser.safari === true
。eek