vben
2021-02-05 91e004e21148c38e572cfbb6b75f0a6f353c15b6
提交 | 用户 | age
2f6253 1 function getTypeVersion() {
2   const userAgent = navigator.userAgent.toLowerCase();
3
4   const browserTypes = {
5     IE: /(?:msie|trident.*rv).([\d.]+)/,
6     Edge: /edge.([\d.]+)/,
7     Chrome: /chrome.([\d.]+)/,
8     Firefox: /firefox.([\d.]+)/,
9     Opera: /opera.([\d.]+)/,
10     Safari: /(?:safari|version).([\d.]+)/,
11   };
12   type BrowserKeys = keyof typeof browserTypes;
13
14   /** browser type */
15   let type!: BrowserKeys | null;
16   /** browser version */
17   let version!: string | null;
18
19   for (type in browserTypes) {
20     if ((version = browserTypes[type as BrowserKeys].exec(userAgent) as any)) {
21       version = version[1];
22       break;
23     }
24   }
25
26   if (version) {
27     if (type === 'IE') {
28       try {
29         document.execCommand('BackgroundImageCache', false, true as any);
30       } catch (error) {
31         console.log(error);
32       }
33     }
34   } else {
35     type = version = null;
36   }
37   return { type, version };
38 }
39
40 const { type, version } = getTypeVersion();
41
42 export function getType() {
43   return type;
44 }
45
46 export function getVersion() {
47   return version;
48 }
49
50 export function isIeFn() {
51   return type === 'IE';
52 }
53
54 export function isChromeFn() {
55   return type === 'Chrome';
56 }
57
58 export function isEdgeFn() {
59   return type === 'Edge';
60 }
61
62 export function isSafariFn() {
63   return type === 'Safari';
64 }
65
66 export function isFirefoxFn() {
67   return type === 'Firefox';
68 }
69
70 export function isOperaFn() {
71   return type === 'Opera';
72 }
b35009 73
V 74 /**
75  * set page Title
76  * @param {*} title  :page Title
77  */
144ab5 78 function setDocumentTitle(title: string) {
b35009 79   document.title = title;
V 80   const ua = navigator.userAgent;
81   const regex = /\bMicroMessenger\/([\d.]+)/;
82   // 兼容
83   if (regex.test(ua) && /ip(hone|od|ad)/i.test(ua)) {
84     const i = document.createElement('iframe');
85     i.src = '/favicon.ico';
86     i.style.display = 'none';
87     i.onload = function () {
88       setTimeout(function () {
89         i.remove();
90       }, 9);
91     };
92     document.body.appendChild(i);
93   }
144ab5 94 }
b35009 95
V 96 export function setTitle(title: string, appTitle?: string) {
97   if (title) {
98     const _title = title ? ` ${title}-${appTitle} ` : `${appTitle}`;
99     setDocumentTitle(_title);
100   }
101 }