如何使用JavaScript检测冷门浏览器(baidu)?
How to detect unpopular browsers (baidu) using JavaScript?
我正在尝试通过提供两种样式使我的应用程序跨浏览器,一种用于支持 CSS 3d 动画的浏览器,一种用于不支持的浏览器,使用此代码来提供功能-检测:
// Function from:
const isValueSupported = (prop, value) => {
const el = document.createElement('div');
el.style[prop] = value;
return el.style[prop] === value;
}
// [unction from: http://lea.verou.me/2009/02/check-if-a-css-property-is-supported/
const isPropertySupported = property => property in document.body.style;
// Detection style inspired by Modernizr library
if (isValueSupported('perspective', '400px') && isValueSupported('transform-style', 'preserve-3d') && isValueSupported('backface-visibility', 'hidden') && isValueSupported('transform', 'rotateY(-180deg)') && isPropertySupported('perspective') && isPropertySupported('transform-style') && isPropertySupported('backface-visibility') && isPropertySupported('transform') && (!navigator.userAgent.includes('Firefox'))) {
document.documentElement.classList.add('csstransforms3d');
} else {
document.documentElement.classList.add('no-csstransforms3d');
}
问题是,虽然有些浏览器,比如 Firefox,通过了测试,但是它们有一些已知的错误,比如 Mozilla's backface-visibility bug,所以我 不得不 browser-sniff :(.
我很快找到了适用于 Firefox 的有用结果:if (navigator.userAgent.includes('Firefox'))
,但对于另一个浏览器,我的计算机上恰好有一个名为 "Baidu browser" 的浏览器,我找不到任何结果。
那么如何检测这些浏览器呢?
您可以使用以下代码检测 JavaScript 中流行的浏览器。
// Mobile Browsers
export const isMobile = () => {
const ua = (navigator || {}).userAgent;
if (ua) {
return (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Mobile|mobile|CriOS/i.test(ua))
}
return false;
}
// Opera 8.0+
export const isOpera = () => {
let opr = window.opr || {};
return (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
}
// Firefox 1.0+
export const isFirefox = () => typeof InstallTrigger !== 'undefined';
// Safari 3.0+ "[object HTMLElementConstructor]"
export const isSafari = () => {
let safari = window.safari || {};
return /constructor/i.test(window.HTMLElement) || (function (p) { return p.toString() === "[object SafariRemoteNotification]"; })(!window['safari'] || (typeof safari !== 'undefined' && safari.pushNotification));
}
// Internet Explorer 6-11
export const isIE = () => /*@cc_on!@*/false || !!document.documentMode;
// Edge 20+
export const isEdge = () => !isIE() && !!window.StyleMedia;
// Chrome 1+
export const isChrome = () => !!window.chrome && !!window.chrome.loadTimes;
因此,任何与这些流行浏览器不匹配的东西都将成为不受欢迎的浏览器。
我正在尝试通过提供两种样式使我的应用程序跨浏览器,一种用于支持 CSS 3d 动画的浏览器,一种用于不支持的浏览器,使用此代码来提供功能-检测:
// Function from:
const isValueSupported = (prop, value) => {
const el = document.createElement('div');
el.style[prop] = value;
return el.style[prop] === value;
}
// [unction from: http://lea.verou.me/2009/02/check-if-a-css-property-is-supported/
const isPropertySupported = property => property in document.body.style;
// Detection style inspired by Modernizr library
if (isValueSupported('perspective', '400px') && isValueSupported('transform-style', 'preserve-3d') && isValueSupported('backface-visibility', 'hidden') && isValueSupported('transform', 'rotateY(-180deg)') && isPropertySupported('perspective') && isPropertySupported('transform-style') && isPropertySupported('backface-visibility') && isPropertySupported('transform') && (!navigator.userAgent.includes('Firefox'))) {
document.documentElement.classList.add('csstransforms3d');
} else {
document.documentElement.classList.add('no-csstransforms3d');
}
问题是,虽然有些浏览器,比如 Firefox,通过了测试,但是它们有一些已知的错误,比如 Mozilla's backface-visibility bug,所以我 不得不 browser-sniff :(.
我很快找到了适用于 Firefox 的有用结果:if (navigator.userAgent.includes('Firefox'))
,但对于另一个浏览器,我的计算机上恰好有一个名为 "Baidu browser" 的浏览器,我找不到任何结果。
那么如何检测这些浏览器呢?
您可以使用以下代码检测 JavaScript 中流行的浏览器。
// Mobile Browsers
export const isMobile = () => {
const ua = (navigator || {}).userAgent;
if (ua) {
return (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Mobile|mobile|CriOS/i.test(ua))
}
return false;
}
// Opera 8.0+
export const isOpera = () => {
let opr = window.opr || {};
return (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
}
// Firefox 1.0+
export const isFirefox = () => typeof InstallTrigger !== 'undefined';
// Safari 3.0+ "[object HTMLElementConstructor]"
export const isSafari = () => {
let safari = window.safari || {};
return /constructor/i.test(window.HTMLElement) || (function (p) { return p.toString() === "[object SafariRemoteNotification]"; })(!window['safari'] || (typeof safari !== 'undefined' && safari.pushNotification));
}
// Internet Explorer 6-11
export const isIE = () => /*@cc_on!@*/false || !!document.documentMode;
// Edge 20+
export const isEdge = () => !isIE() && !!window.StyleMedia;
// Chrome 1+
export const isChrome = () => !!window.chrome && !!window.chrome.loadTimes;
因此,任何与这些流行浏览器不匹配的东西都将成为不受欢迎的浏览器。