UNPKG

vue3-detect-browser

Version:

Plugin for Vue3 (Option API and Composition API) that detects browser name, version, and user-agent

54 lines (53 loc) 2.3 kB
"use strict"; // fork from https://github.com/smg99/vue-detect-browser to support Vue3's Option API and Composition API Object.defineProperty(exports, "__esModule", { value: true }); exports.useBrowserDetect = exports.browserDetect = exports.createBrowserDetect = void 0; const vue_1 = require("vue"); function createBrowserDetect() { const ua = navigator.userAgent; const browserDetect = (0, vue_1.reactive)({ isOpera: !!window.opera || ua.includes(" OPR/"), isEdge: /Edge/.test(ua), isFirefox: /Firefox/.test(ua), isSafari: /constructor/i.test(window.HTMLElement) || (function (p) { return p.toString() === "[object SafariRemoteNotification]"; })(!window["safari"] || (window["safari"] && window["safari"].pushNotification)), isIE: /*@cc_on!@*/ false || !!document.documentMode, isChrome: /Google Inc/.test(navigator.vendor) && !/Edge/.test(ua), isChromeIOS: /CriOS/.test(ua), isIOS: /iPad|iPhone|iPod/.test(ua) && !window.MSStream, meta: browserSpecs(ua), }); function browserSpecs(uaString) { let tem, M = uaString.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || []; if (/trident/i.test(M[1])) { tem = /\brv[ :]+(\d+)/g.exec(uaString) || []; return { name: "IE", version: tem[1] || "", ua: uaString }; } if (M[1] === "Chrome") { tem = uaString.match(/\b(OPR|Edge)\/(\d+)/); if (tem != null) return { name: tem[1].replace("OPR", "Opera"), version: tem[2], ua: uaString, }; } M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, "-?"]; if ((tem = uaString.match(/version\/(\d+)/i)) != null) M.splice(1, 1, tem[1]); return { name: M[0], version: M[1], ua: uaString }; } return browserDetect; } exports.createBrowserDetect = createBrowserDetect; exports.browserDetect = { install(app) { const browserDetect = createBrowserDetect(); app.config.globalProperties.$browserDetect = browserDetect; }, }; exports.useBrowserDetect = createBrowserDetect;