尽管两者都是基于Webkit的浏览器,但Safari会对URL中的引号进行编码,而Chrome则不会。
因此,我需要在JS中区分这两个浏览器。 jQuery的浏览器检测文档将"safari"标记为已弃用。
是否有更好的方法,还是现在只能坚持使用已弃用的值?
因此,我需要在JS中区分这两个浏览器。 jQuery的浏览器检测文档将"safari"标记为已弃用。
是否有更好的方法,还是现在只能坚持使用已弃用的值?
Using jQuery it goes like this:
"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
通用函数
var getBrowseActive = function (browserName) {
return navigator.userAgent.indexOf(browserName) > -1;
};
我最好的解决方案
function getBrowserInfo() {
const ua = navigator.userAgent; let tem;
let M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
if (/trident/i.test(M[1])) {
tem = /\brv[ :]+(\d+)/g.exec(ua) || [];
return { name: 'IE ', version: (tem[1] || '') };
}
if (M[1] === 'Chrome') {
tem = ua.match(/\bOPR\/(\d+)/);
if (tem != null) {
return { name: 'Opera', version: tem[1] };
}
}
M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];
tem = ua.match(/version\/(\d+)/i);
if (tem != null) {
M.splice(1, 1, tem[1]);
}
return {
name: M[0],
version: M[1],
};
}
getBrowserInfo();
$.browser.safari === true
。哎呀。 - davin