@cainiaofe/cn-utils
Version:
菜鸟前端基础工具库
647 lines (646 loc) • 19.5 kB
JavaScript
import match from "../../common/match";
var commonVersionIdentifier = /version\/(\d+(\.?_?\d+)+)/i;
var browsersList = [
/* Googlebot */
{
test: [/googlebot/i],
describe: function (ua) {
var browser = {
name: 'Googlebot',
version: '',
};
var version = match.getFirstMatch(/googlebot\/(\d+(\.\d+))/i, ua) ||
match.getFirstMatch(commonVersionIdentifier, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
/* Opera < 13.0 */
{
test: [/opera/i],
describe: function (ua) {
var browser = {
name: 'Opera',
version: '',
};
var version = match.getFirstMatch(commonVersionIdentifier, ua) ||
match.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
/* Opera > 13.0 */
{
test: [/opr\/|opios/i],
describe: function (ua) {
var browser = {
name: 'Opera',
version: '',
};
var version = match.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i, ua) ||
match.getFirstMatch(commonVersionIdentifier, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/SamsungBrowser/i],
describe: function (ua) {
var browser = {
name: 'Samsung Internet for Android',
version: '',
};
var version = match.getFirstMatch(commonVersionIdentifier, ua) ||
match.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/Whale/i],
describe: function (ua) {
var browser = {
name: 'NAVER Whale Browser',
version: '',
};
var version = match.getFirstMatch(commonVersionIdentifier, ua) ||
match.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/MZBrowser/i],
describe: function (ua) {
var browser = {
name: 'MZ Browser',
version: '',
};
var version = match.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i, ua) ||
match.getFirstMatch(commonVersionIdentifier, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/focus/i],
describe: function (ua) {
var browser = {
name: 'Focus',
version: '',
};
var version = match.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i, ua) ||
match.getFirstMatch(commonVersionIdentifier, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/swing/i],
describe: function (ua) {
var browser = {
name: 'Swing',
version: '',
};
var version = match.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i, ua) ||
match.getFirstMatch(commonVersionIdentifier, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/coast/i],
describe: function (ua) {
var browser = {
name: 'Opera Coast',
version: '',
};
var version = match.getFirstMatch(commonVersionIdentifier, ua) ||
match.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/opt\/\d+(?:.?_?\d+)+/i],
describe: function (ua) {
var browser = {
name: 'Opera Touch',
version: '',
};
var version = match.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i, ua) ||
match.getFirstMatch(commonVersionIdentifier, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/yabrowser/i],
describe: function (ua) {
var browser = {
name: 'Yandex Browser',
version: '',
};
var version = match.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i, ua) ||
match.getFirstMatch(commonVersionIdentifier, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/ucbrowser/i],
describe: function (ua) {
var browser = {
name: 'UC Browser',
version: '',
};
var version = match.getFirstMatch(commonVersionIdentifier, ua) ||
match.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/Maxthon|mxios/i],
describe: function (ua) {
var browser = {
name: 'Maxthon',
version: '',
};
var version = match.getFirstMatch(commonVersionIdentifier, ua) ||
match.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/epiphany/i],
describe: function (ua) {
var browser = {
name: 'Epiphany',
version: '',
};
var version = match.getFirstMatch(commonVersionIdentifier, ua) ||
match.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/puffin/i],
describe: function (ua) {
var browser = {
name: 'Puffin',
version: '',
};
var version = match.getFirstMatch(commonVersionIdentifier, ua) ||
match.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/sleipnir/i],
describe: function (ua) {
var browser = {
name: 'Sleipnir',
version: '',
};
var version = match.getFirstMatch(commonVersionIdentifier, ua) ||
match.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/k-meleon/i],
describe: function (ua) {
var browser = {
name: 'K-Meleon',
version: '',
};
var version = match.getFirstMatch(commonVersionIdentifier, ua) ||
match.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/micromessenger/i],
describe: function (ua) {
var browser = {
name: 'WeChat',
version: '',
};
var version = match.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i, ua) ||
match.getFirstMatch(commonVersionIdentifier, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/qqbrowser/i],
describe: function (ua) {
var browser = {
name: /qqbrowserlite/i.test(ua) ? 'QQ Browser Lite' : 'QQ Browser',
version: '',
};
var version = match.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i, ua) || match.getFirstMatch(commonVersionIdentifier, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/msie|trident/i],
describe: function (ua) {
var browser = {
name: 'Internet Explorer',
version: '',
};
var version = match.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/\sedg\//i],
describe: function (ua) {
var browser = {
name: 'Microsoft Edge',
version: '',
};
var version = match.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/edg([ea]|ios)/i],
describe: function (ua) {
var browser = {
name: 'Microsoft Edge',
version: '',
};
var version = match.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/vivaldi/i],
describe: function (ua) {
var browser = {
name: 'Vivaldi',
version: '',
};
var version = match.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/seamonkey/i],
describe: function (ua) {
var browser = {
name: 'SeaMonkey',
version: '',
};
var version = match.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/sailfish/i],
describe: function (ua) {
var browser = {
name: 'Sailfish',
version: '',
};
var version = match.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/silk/i],
describe: function (ua) {
var browser = {
name: 'Amazon Silk',
version: '',
};
var version = match.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/phantom/i],
describe: function (ua) {
var browser = {
name: 'PhantomJS',
version: '',
};
var version = match.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/slimerjs/i],
describe: function (ua) {
var browser = {
name: 'SlimerJS',
version: '',
};
var version = match.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/blackberry|\bbb\d+/i, /rim\stablet/i],
describe: function (ua) {
var browser = {
name: 'BlackBerry',
version: '',
};
var version = match.getFirstMatch(commonVersionIdentifier, ua) ||
match.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/(web|hpw)[o0]s/i],
describe: function (ua) {
var browser = {
name: 'WebOS Browser',
version: '',
};
var version = match.getFirstMatch(commonVersionIdentifier, ua) ||
match.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/bada/i],
describe: function (ua) {
var browser = {
name: 'Bada',
version: '',
};
var version = match.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/tizen/i],
describe: function (ua) {
var browser = {
name: 'Tizen',
version: '',
};
var version = match.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i, ua) ||
match.getFirstMatch(commonVersionIdentifier, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/qupzilla/i],
describe: function (ua) {
var browser = {
name: 'QupZilla',
version: '',
};
var version = match.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i, ua) ||
match.getFirstMatch(commonVersionIdentifier, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/firefox|iceweasel|fxios/i],
describe: function (ua) {
var browser = {
name: 'Firefox',
version: '',
};
var version = match.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/electron/i],
describe: function (ua) {
var browser = {
name: 'Electron',
version: '',
};
var version = match.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/MiuiBrowser/i],
describe: function (ua) {
var browser = {
name: 'Miui',
version: '',
};
var version = match.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/chromium/i],
describe: function (ua) {
var browser = {
name: 'Chromium',
version: '',
};
var version = match.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i, ua) ||
match.getFirstMatch(commonVersionIdentifier, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/chrome|crios|crmo/i],
describe: function (ua) {
var browser = {
name: 'Chrome',
version: '',
};
var version = match.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
{
test: [/GSA/i],
describe: function (ua) {
var browser = {
name: 'Google Search',
version: '',
};
var version = match.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
/* Android Browser */
{
test: function (parser) {
var notLikeAndroid = !parser.test(/like android/i);
var butAndroid = parser.test(/android/i);
return notLikeAndroid && butAndroid;
},
describe: function (ua) {
var browser = {
name: 'Android Browser',
version: '',
};
var version = match.getFirstMatch(commonVersionIdentifier, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
/* PlayStation 4 */
{
test: [/playstation 4/i],
describe: function (ua) {
var browser = {
name: 'PlayStation 4',
version: '',
};
var version = match.getFirstMatch(commonVersionIdentifier, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
/* Safari */
{
test: [/safari|applewebkit/i],
describe: function (ua) {
var browser = {
name: 'Safari',
version: '',
};
var version = match.getFirstMatch(commonVersionIdentifier, ua);
if (version) {
browser.version = version;
}
return browser;
},
},
/* Something else */
{
test: [/.*/i],
describe: function (ua) {
/* Here we try to make sure that there are explicit details about the device
* in order to decide what regexp exactly we want to apply
* (as there is a specific decision based on that conclusion)
*/
var regexpWithoutDeviceSpec = /^(.*)\/(.*) /;
var regexpWithDeviceSpec = /^(.*)\/(.*)[ \t]\((.*)/;
var hasDeviceSpec = ua.search('\\(') !== -1;
var regexp = hasDeviceSpec
? regexpWithDeviceSpec
: regexpWithoutDeviceSpec;
return {
name: match.getFirstMatch(regexp, ua),
version: match.getSecondMatch(regexp, ua),
};
},
},
];
export default browsersList;