实际上哪些版本的浏览器可以命名为modern?哪里支持css3和更多或更少的现代功能?
谢谢!
function isOldBrowser() {
var isOld = false;
var detect = function(){
var ua= navigator.userAgent, tem, M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*([\d\.]+)/i) || [];
if(/trident/i.test(M[1])){
tem= /\brv[ :]+(\d+(\.\d+)?)/g.exec(ua) || [];
return 'IE '+(tem[1] || '');
}
M = M[2] ? [M[1].toLowerCase(), parseInt(M[2],10)] : [navigator.appName.toLowerCase(), parseInt(navigator.appVersion,10), '-?'];
if((tem= ua.match(/version\/([\.\d]+)/i))!= null) M[2]= tem[1];
return M;
};
var browser = detect();
if (document.all && !document.querySelector) isOld = true; //IE7 or lower
else if (document.all && document.querySelector && !document.addEventListener) isOld = true; //IE8
else if (browser[0] == 'firefox' && browser[1] < 4) isOld = true; //FF4+
else if (browser[0] == 'safari' && browser[1] < 5) isOld = true; //Safari 5+
return isOld;
}
答案 0 :(得分:5)
Browser sniffing is almost always a bad idea。如果您希望支持旧浏览器,请使用Modernizr和功能检测来提供备用内容。您可以参考caniuse找出哪些浏览器支持哪些功能。
答案 1 :(得分:2)
这对我有用:
var isModernBrowser = typeof(Intl) != "undefined";
另一件事是,如果您正在运行Internet Explorer 11,但在SharePoint下(即使使用最新的SharePoint 2016),它将正确返回false,因为SharePoint强制页面为document.documentMode == 8. / p>
答案 2 :(得分:0)
菲利普·沃尔顿 (Philip Walton) 对此有很好的阅读:https://philipwalton.com/articles/loading-polyfills-only-when-needed/
<块引用>让您的代码立即对大多数用户运行,但在为所有其他用户加载 polyfills 之前停止执行的最简单方法是构建您的站点,以便所有代码路径都有一个入口点。
对于上面链接的网站,这里是使用的功能:
function browserSupportsAllFeatures() {
return window.Promise && window.fetch && window.Symbol;
}
就我而言,我正在使用类似的东西:
const isModernBrowser = () => {
return 'fetch' in window &&
'Promise' in window &&
'assign' in Object &&
'keys' in Object
}