| <!-- | |
| Licensed to the Apache Software Foundation (ASF) under one | |
| or more contributor license agreements. See the NOTICE file | |
| distributed with this work for additional information | |
| regarding copyright ownership. The ASF licenses this file | |
| to you under the Apache License, Version 2.0 (the | |
| "License"); you may not use this file except in compliance | |
| with the License. You may obtain a copy of the License at | |
| http://www.apache.org/licenses/LICENSE-2.0 | |
| Unless required by applicable law or agreed to in writing, | |
| software distributed under the License is distributed on an | |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
| KIND, either express or implied. See the License for the | |
| specific language governing permissions and limitations | |
| under the License. | |
| --> | |
| <!DOCTYPE html> | |
| <html data-bs-theme=""> | |
| <head> | |
| <meta charset="utf-8" /> | |
| <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" /> | |
| <meta name="theme-color" /> | |
| <meta name="generator" content="Answer - https://github.com/apache/answer"> | |
| <link rel="manifest" href="%BASE_URL%manifest.json" /> | |
| </head> | |
| <body> | |
| <noscript>You need to enable JavaScript to run this app.</noscript> | |
| <div id="root"> | |
| <div id="spin-mask"> | |
| <noscript> | |
| <style> | |
| #spin-mask { | |
| display: none !important; | |
| } | |
| #protect-browser { | |
| display: none; | |
| } | |
| </style> | |
| </noscript> | |
| <style> | |
| @keyframes _doc-spin { | |
| to { transform: rotate(360deg) } | |
| } | |
| #spin-mask { | |
| position: fixed; | |
| top: 0; | |
| right: 0; | |
| bottom: 0; | |
| left: 0; | |
| background-color: white; | |
| z-index: 9999; | |
| } | |
| #spin-container { | |
| position: absolute; | |
| top: 50%; | |
| left: 50%; | |
| transform: translate(-50%, -50%); | |
| } | |
| #spin-container .spinner { | |
| box-sizing: border-box; | |
| display: inline-block; | |
| width: 2rem; | |
| height: 2rem; | |
| vertical-align: -.125em; | |
| border: .25rem solid currentColor; | |
| border-right-color: transparent; | |
| color: rgba(108, 117, 125, .75); | |
| border-radius: 50%; | |
| animation: 0.75s linear infinite _doc-spin; | |
| } | |
| #protect-browser { | |
| padding: 20px; | |
| text-align: center; | |
| } | |
| </style> | |
| <div id="spin-container"> | |
| <div class="spinner"></div> | |
| </div> | |
| <div id="protect-browser"></div> | |
| </div> | |
| </div> | |
| <script type="module" src="/src/index.tsx"></script> | |
| </body> | |
| <script> | |
| // disable react devtools | |
| if (typeof window.__REACT_DEVTOOLS_GLOBAL_HOOK__ === 'object') { | |
| window.__REACT_DEVTOOLS_GLOBAL_HOOK__.inject = function () {}; | |
| } | |
| /** | |
| * @description: Prompt that the browser version is too low | |
| */ | |
| const defaultList = [ | |
| { | |
| name: 'Edge', | |
| version: '100' | |
| }, | |
| { | |
| name: 'Firefox', | |
| version: '100' | |
| }, | |
| { | |
| name: 'Chrome', | |
| version: '90' | |
| }, | |
| { | |
| name: 'Safari', | |
| version: '15' | |
| }, | |
| { | |
| name: 'IE', | |
| } | |
| ]; | |
| function getBrowserTypeAndVersion(){ | |
| var browser = { | |
| name: '', | |
| version: '' | |
| }; | |
| var ua = navigator.userAgent.toLowerCase(); | |
| var s; | |
| ((ua.indexOf("compatible") > -1 && ua.indexOf("MSIE") > -1) || (ua.indexOf('Trident') > -1 && ua.indexOf("rv:11.0") > -1)) ? browser = { name: 'IE', version: '' } : | |
| (s = ua.match(/edge\/([\d\.]+)/)) ? browser = { name: 'Edge', version: s[1] } : | |
| (s = ua.match(/firefox\/([\d\.]+)/)) ? browser = { name: 'Firefox', version: s[1] } : | |
| (s = ua.match(/chrome\/([\d\.]+)/)) ? browser = { name: 'Chrome', version: s[1] } : | |
| (s = ua.match(/version\/([\d\.]+).*safari/)) ? browser = { name: 'Safari', version: s[1] } : browser = { name: 'unknown', version: '' }; | |
| // 根据关系进行判断 | |
| return browser; | |
| } | |
| function compareVersion(version1, version2) { | |
| var v1 = version1.split('.'); | |
| var v2 = version2.split('.'); | |
| var len = Math.max(v1.length, v2.length); | |
| while (v1.length < len) { | |
| v1.push('0'); | |
| } | |
| while (v2.length < len) { | |
| v2.push('0'); | |
| } | |
| for (var i = 0; i < len; i++) { | |
| var num1 = parseInt(v1[i]); | |
| var num2 = parseInt(v2[i]); | |
| if (num1 >= num2) { | |
| return 1; | |
| } else if (num1 < num2) { | |
| return -1; | |
| } | |
| } | |
| return 0; | |
| } | |
| const browserInfo = getBrowserTypeAndVersion(); | |
| if (browserInfo.name === 'IE') { | |
| const div = document.getElementById('protect-browser'); | |
| div.innerText = 'Sorry, this site does not support Internet Explorer. In order to avoid affecting the normal use of our features, please use a more modern browser such as Edge, Firefox, Chrome, or Safari.' | |
| } else { | |
| const notSupport = defaultList.some(item => { | |
| if (item.name === browserInfo.name) { | |
| return compareVersion(browserInfo.version, item.version) === -1; | |
| } | |
| return false; | |
| }); | |
| if (notSupport) { | |
| const div = document.getElementById('protect-browser'); | |
| div.innerText = 'The current browser version is too low, in order not to affect the normal use of the function, please upgrade the browser to the latest version.' | |
| } | |
| } | |
| </script> | |
| </html> |