123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- var isBrowser = require('./isBrowser');
- var toInt = require('./toInt');
- var keys = require('./keys');
- exports = function(ua) {
- ua = ua || (isBrowser ? navigator.userAgent : '');
- ua = ua.toLowerCase();
- var ieVer = getVer(ua, 'msie ');
- if (ieVer)
- return {
- version: ieVer,
- name: 'ie'
- };
- if (regIe11.test(ua))
- return {
- version: 11,
- name: 'ie'
- };
- for (var i = 0, len = browsers.length; i < len; i++) {
- var name = browsers[i];
- var match = ua.match(regBrowsers[name]);
- if (match == null) continue;
- var version = toInt(match[1].split('.')[0]);
- if (name === 'opera') version = getVer(ua, 'version/') || version;
- return {
- name: name,
- version: version
- };
- }
- return {
- name: 'unknown',
- version: -1
- };
- };
- var regBrowsers = {
- edge: /edge\/([0-9._]+)/,
- firefox: /firefox\/([0-9.]+)(?:\s|$)/,
- opera: /opera\/([0-9.]+)(?:\s|$)/,
- android: /android\s([0-9.]+)/,
- ios: /version\/([0-9._]+).*mobile.*safari.*/,
- safari: /version\/([0-9._]+).*safari/,
- chrome: /(?!chrom.*opr)chrom(?:e|ium)\/([0-9.]+)(:?\s|$)/
- };
- var regIe11 = /trident\/7\./;
- var browsers = keys(regBrowsers);
- function getVer(ua, mark) {
- var idx = ua.indexOf(mark);
- if (idx > -1)
- return toInt(ua.substring(idx + mark.length, ua.indexOf('.', idx)));
- }
- module.exports = exports;
|