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
JavaScript
;
// 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;