UNPKG

@thumbmarkjs/thumbmarkjs

Version:

![GitHub package.json dynamic](https://img.shields.io/github/package-json/version/ilkkapeltola/thumbmarkjs) ![NPM Version](https://img.shields.io/npm/v/@thumbmarkjs/thumbmarkjs) ![NPM Downloads](https://img.shields.io/npm/dm/%40thumbmarkjs%2Fthumbmarkjs

64 lines (58 loc) 2.2 kB
// Define an interface for the browser result interface BrowserResult { name: string; version: string; } // Define a function to parse the user agent string and return the browser name and version export function getBrowser(): BrowserResult { if (typeof navigator === 'undefined') { return { name: "unknown", version: "unknown" } } const ua = navigator.userAgent // Define some regular expressions to match different browsers and their versions const regexes = [ // Edge /(?<name>Edge|Edg)\/(?<version>\d+(?:\.\d+)?)/, // Chrome, Chromium, Opera, Vivaldi, Brave, etc. /(?<name>(?:Chrome|Chromium|OPR|Opera|Vivaldi|Brave))\/(?<version>\d+(?:\.\d+)?)/, // Firefox, Waterfox, etc. /(?<name>(?:Firefox|Waterfox|Iceweasel|IceCat))\/(?<version>\d+(?:\.\d+)?)/, // Safari, Mobile Safari, etc. /(?<name>Safari)\/(?<version>\d+(?:\.\d+)?)/, // Internet Explorer, IE Mobile, etc. /(?<name>MSIE|Trident|IEMobile).+?(?<version>\d+(?:\.\d+)?)/, // Other browsers that use the format "BrowserName/version" /(?<name>[A-Za-z]+)\/(?<version>\d+(?:\.\d+)?)/, // Samsung internet browser /(?<name>SamsungBrowser)\/(?<version>\d+(?:\.\d+)?)/, // Samsung browser (Tizen format) /(?<name>samsung).*Version\/(?<version>\d+(?:\.\d+)?)/i ]; // Define a map for browser name translations const browserNameMap: { [key: string]: string } = { 'edg': 'Edge', 'opr': 'Opera', 'samsung': 'SamsungBrowser' }; // Loop through the regexes and try to find a match for (const regex of regexes) { const match = ua.match(regex); if (match && match.groups) { // Translate the browser name if necessary const name = browserNameMap[match.groups.name.toLowerCase()] || match.groups.name; // Return the browser name and version return { name: name, version: match.groups.version }; } } // If no match is found, return unknown return { name: "unknown", version: "unknown" }; }