on master help sign in
bridge/src/lib/useBrowser.ts
32 lines 961 B history raw
1import { useEffect, useState } from 'react';
3export function useBrowser() {
4 const [browser, setBrowser] = useState<{
5 name: 'chrome' | 'brave' | 'safari' | 'firefox' | 'edge' | 'other';
6 isChromium: boolean;
7 } | null>(null);
9 useEffect(() => {
10 const ua = navigator.userAgent;
11 const vendor = navigator.vendor ?? '';
13 const isChromium = !!(window as any).chrome;
14 const isBrave = !!(navigator as any).brave;
15 const isSafari = /Safari/.test(ua) && !/Chrome/.test(ua);
16 const isFirefox = /Firefox/.test(ua);
17 const isEdge = /Edg/.test(ua);
18 const isChrome = isChromium && !isBrave && !isEdge && /Chrome/.test(ua);
20 let name: typeof browser['name'] = 'other';
21 if (isBrave) name = 'brave';
22 else if (isChrome) name = 'chrome';
23 else if (isSafari) name = 'safari';
24 else if (isFirefox) name = 'firefox';
25 else if (isEdge) name = 'edge';
27 setBrowser({ name, isChromium });
28 }, []);
30 return browser;