import * as React from 'react'; import { useState, useEffect } from 'react'; import Flag from 'react-flagpack'; import * as Bowser from 'bowser'; import './App.css'; const updateDOM = (id, text) => { document.getElementById(id).innerHTML += text; }; const App = () => { const [country, setCountry] = useState('US'); const [flag, setFlag] = useState(false); useEffect(() => { fetch('http://ip-api.com/json') .then((response) => response.json()) .then((data) => { setCountry(data.countryCode); setFlag(true); updateDOM('ipAddress', data.query); updateDOM('country', data.country); updateDOM('region', data.regionName); updateDOM('city', data.city); updateDOM('zip', data.zip); updateDOM('provider', data.isp); }); const uaResult = Bowser.parse(navigator.userAgent); updateDOM('browser', uaResult.browser.name); updateDOM('browserVersion', uaResult.browser.version); updateDOM('browserEngine', uaResult.engine.name); updateDOM('os', `${uaResult.os.name} ${uaResult.os.versionName}`); updateDOM('language', navigator.language); updateDOM('timezone', Intl.DateTimeFormat().resolvedOptions().timeZone); updateDOM('cookies', navigator.cookieEnabled); updateDOM('java', navigator.javaEnabled()); updateDOM('dnt', navigator.doNotTrack ? 'true' : 'false'); // updateDOM('plugins', navigator.plugins); updateDOM('platform', uaResult.platform.type); updateDOM('screenSize', `${window.screen.width}x${window.screen.height}`); updateDOM('color', window.screen.colorDepth); navigator.getBattery().then((battery) => { updateDOM('batteryLevel', `${Math.round(battery.level * 100)}%`); updateDOM('batteryStatus', battery.charging ? 'Charging' : 'Not charging'); }); updateDOM('memory', `${navigator.deviceMemory}GB`); updateDOM('cores', navigator.hardwareConcurrency); const gl = document.createElement('canvas').getContext('webgl'); const ext = gl.getExtension('WEBGL_debug_renderer_info'); updateDOM('vendor', gl.getParameter(ext.UNMASKED_VENDOR_WEBGL)); updateDOM('renderer', gl.getParameter(ext.UNMASKED_RENDERER_WEBGL)); }, []); return (
| IP address: | |
| Country: |
{flag === true &&
|
| Region: | |
| City: | |
| Zip: | |
| Provider: | |
| Browser: | |
| Browser version: | |
| Browser engine: | |
| Operating system: | |
| Language: | |
| Timezone: | |
| Cookies enabled: | |
| Java enabled: | |
| DNT header enabled: | |
| Platform: | |
| Screen resolution: | |
| Color Resolution: | |
| Battery level: | |
| Battery status: | |
| Device memory: | |
| # of CPU cores: | |
| WebGL vendor: | |
| WebGL renderer: |