UNPKG

perf-observer-kit

Version:

A lightweight, flexible library for monitoring web performance metrics including Core Web Vitals, resource loading performance, long tasks, and navigation timing.

150 lines 6.47 kB
/** * 浏览器和设备信息收集器 * 提供收集浏览器环境信息的方法 */ export class BrowserInfoCollector { /** * 获取浏览器和设备相关信息 * @returns 浏览器和设备信息 */ static getBrowserInfo() { if (typeof window === 'undefined' || typeof navigator === 'undefined') { return {}; } try { return { userAgent: navigator.userAgent, language: navigator.language, platform: navigator.platform, vendor: navigator.vendor, screenSize: { width: window.screen.width, height: window.screen.height }, windowSize: { width: window.innerWidth, height: window.innerHeight }, devicePixelRatio: window.devicePixelRatio, cookiesEnabled: navigator.cookieEnabled }; } catch (error) { console.warn('无法获取完整的浏览器信息', error); return {}; } } /** * 检测浏览器名称和版本 * @returns 浏览器名称和版本信息 */ static detectBrowser() { var _a, _b, _c, _d, _e, _f, _g, _h, _j; if (typeof navigator === 'undefined') { return { name: 'unknown', version: 'unknown' }; } const userAgent = navigator.userAgent; let browserName = 'unknown'; let version = 'unknown'; try { // 检测常见浏览器 if (userAgent.indexOf('Firefox') > -1) { browserName = 'Firefox'; version = ((_a = userAgent.match(/Firefox\/([\d.]+)/)) === null || _a === void 0 ? void 0 : _a[1]) || ''; } else if (userAgent.indexOf('Edge') > -1 || userAgent.indexOf('Edg/') > -1) { browserName = 'Edge'; version = ((_b = userAgent.match(/Edge\/([\d.]+)/)) === null || _b === void 0 ? void 0 : _b[1]) || ((_c = userAgent.match(/Edg\/([\d.]+)/)) === null || _c === void 0 ? void 0 : _c[1]) || ''; } else if (userAgent.indexOf('Chrome') > -1) { browserName = 'Chrome'; version = ((_d = userAgent.match(/Chrome\/([\d.]+)/)) === null || _d === void 0 ? void 0 : _d[1]) || ''; } else if (userAgent.indexOf('Safari') > -1 && userAgent.indexOf('Chrome') === -1) { browserName = 'Safari'; version = ((_e = userAgent.match(/Version\/([\d.]+)/)) === null || _e === void 0 ? void 0 : _e[1]) || ''; } else if (userAgent.indexOf('MSIE') > -1 || userAgent.indexOf('Trident/') > -1) { browserName = 'Internet Explorer'; version = ((_f = userAgent.match(/MSIE ([\d.]+)/)) === null || _f === void 0 ? void 0 : _f[1]) || ((_g = userAgent.match(/rv:([\d.]+)/)) === null || _g === void 0 ? void 0 : _g[1]) || ''; } else if (userAgent.indexOf('Opera') > -1 || userAgent.indexOf('OPR/') > -1) { browserName = 'Opera'; version = ((_h = userAgent.match(/Opera\/([\d.]+)/)) === null || _h === void 0 ? void 0 : _h[1]) || ((_j = userAgent.match(/OPR\/([\d.]+)/)) === null || _j === void 0 ? void 0 : _j[1]) || ''; } return { name: browserName, version }; } catch (error) { console.warn('无法检测浏览器版本', error); return { name: 'unknown', version: 'unknown' }; } } /** * 检测操作系统 * @returns 操作系统名称和版本信息 */ static detectOS() { var _a, _b, _c, _d, _e; if (typeof navigator === 'undefined') { return { name: 'unknown', version: 'unknown' }; } const userAgent = navigator.userAgent; let osName = 'unknown'; let version = 'unknown'; try { if (userAgent.indexOf('Windows') > -1) { osName = 'Windows'; if (userAgent.indexOf('Windows NT 10.0') > -1) version = '10'; else if (userAgent.indexOf('Windows NT 6.3') > -1) version = '8.1'; else if (userAgent.indexOf('Windows NT 6.2') > -1) version = '8'; else if (userAgent.indexOf('Windows NT 6.1') > -1) version = '7'; else if (userAgent.indexOf('Windows NT 6.0') > -1) version = 'Vista'; else if (userAgent.indexOf('Windows NT 5.1') > -1) version = 'XP'; } else if (userAgent.indexOf('Mac OS X') > -1) { osName = 'macOS'; version = ((_b = (_a = userAgent.match(/Mac OS X ([0-9_\.]+)/)) === null || _a === void 0 ? void 0 : _a[1]) === null || _b === void 0 ? void 0 : _b.replace(/_/g, '.')) || ''; } else if (userAgent.indexOf('Android') > -1) { osName = 'Android'; version = ((_c = userAgent.match(/Android ([0-9\.]+)/)) === null || _c === void 0 ? void 0 : _c[1]) || ''; } else if (userAgent.indexOf('iOS') > -1 || userAgent.indexOf('iPhone') > -1 || userAgent.indexOf('iPad') > -1) { osName = 'iOS'; version = ((_e = (_d = userAgent.match(/OS ([0-9_\.]+)/)) === null || _d === void 0 ? void 0 : _d[1]) === null || _e === void 0 ? void 0 : _e.replace(/_/g, '.')) || ''; } else if (userAgent.indexOf('Linux') > -1) { osName = 'Linux'; } return { name: osName, version }; } catch (error) { console.warn('无法检测操作系统', error); return { name: 'unknown', version: 'unknown' }; } } /** * 获取完整的环境信息 * @returns 完整的浏览器和操作系统信息 */ static getEnvironmentInfo() { const browserInfo = this.getBrowserInfo(); const browserDetails = this.detectBrowser(); const osDetails = this.detectOS(); return { ...browserInfo, browser: browserDetails, os: osDetails }; } } //# sourceMappingURL=browser-info.js.map