UNPKG

@cainiaofe/cn-utils

Version:

菜鸟前端基础工具库

647 lines (646 loc) 19.5 kB
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;