使用 jQuery 检测 Safari
虽然两者都是基于 Webkit 的浏览器,但 Safari 会对 URL 中的引号进行 urlencode,而 Chrome 则不会。
因此我需要在JS中区分这两者。
jQuery 的浏览器检测文档 将“safari”标记为已弃用。
有更好的方法还是我暂时坚持使用已弃用的值?
Though both are Webkit based browsers, Safari urlencodes quotation marks in the URL while Chrome does not.
Therefore I need to distinguish between these two in JS.
jQuery's browser detection docs mark "safari" as deprecated.
Is there a better method or do I just stick with the deprecated value for now?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
发布评论
评论(14)
嗼ふ静2024-11-12 04:02:00
//Check if Safari
function isSafari() {
return /^((?!chrome).)*safari/i.test(navigator.userAgent);
}
//Check if MAC
if(navigator.userAgent.indexOf('Mac')>1){
alert(isSafari());
}
岁月打碎记忆2024-11-12 04:02:00
解决此问题的一种非常有用的方法是检测浏览器的 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 实现的问题提供了安全且永久的修复。
快乐编码!
倒数2024-11-12 04:02:00
// 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
衣神在巴黎2024-11-12 04:02:00
我的最佳解决方案
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();
~没有更多了~
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
混合使用
功能检测
和Useragent
字符串:用法:
if (is_safari)alert('Safari');
或者仅适用于 Safari,请使用以下命令:
Using a mix of
feature detection
andUseragent
string:Usage:
if (is_safari) alert('Safari');
Or for Safari only, use this :