Skip to content

Instantly share code, notes, and snippets.

@andreasvirkus
Created January 24, 2019 15:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save andreasvirkus/f0e898f5b182f9b8d8aa53f9e3d1eef2 to your computer and use it in GitHub Desktop.
Save andreasvirkus/f0e898f5b182f9b8d8aa53f9e3d1eef2 to your computer and use it in GitHub Desktop.
export const gatherDeviceIntel = () => {
const header = [
navigator.platform,
navigator.userAgent,
navigator.appVersion,
navigator.vendor,
window.opera
]
const dataos = [
{ name: 'Windows Phone', value: 'Windows Phone', version: 'OS' },
{ name: 'Windows', value: 'Win', version: 'NT' },
{ name: 'iPhone', value: 'iPhone', version: 'OS' },
{ name: 'iPad', value: 'iPad', version: 'OS' },
{ name: 'Kindle', value: 'Silk', version: 'Silk' },
{ name: 'Android', value: 'Android', version: 'Android' },
{ name: 'PlayBook', value: 'PlayBook', version: 'OS' },
{ name: 'BlackBerry', value: 'BlackBerry', version: '/' },
{ name: 'Macintosh', value: 'Mac', version: 'OS X' },
{ name: 'Linux', value: 'Linux', version: 'rv' },
{ name: 'Palm', value: 'Palm', version: 'PalmOS' }
]
const databrowser = [
{ name: 'Chrome', value: 'Chrome', version: 'Chrome' },
{ name: 'Firefox', value: 'Firefox', version: 'Firefox' },
{ name: 'Safari', value: 'Safari', version: 'Version' },
{ name: 'Internet Explorer', value: 'MSIE', version: 'MSIE' },
{ name: 'Opera', value: 'Opera', version: 'Opera' },
{ name: 'BlackBerry', value: 'CLDC', version: 'CLDC' },
{ name: 'Mozilla', value: 'Mozilla', version: 'Mozilla' }
]
const matchItem = (string, data) => {
let i = 0
let j = 0
let regex
let regexv
let match
let matches
let version
for (i = 0; i < data.length; i += 1) {
regex = new RegExp(data[i].value, 'i')
match = regex.test(string)
if (match) {
regexv = new RegExp(data[i].version + '[- /:;]([\\d._]+)', 'i')
matches = string.match(regexv)
version = ''
if (matches) { if (matches[1]) { matches = matches[1] } }
if (matches) {
matches = matches.split(/[._]+/)
for (j = 0; j < matches.length; j += 1) {
if (j === 0) {
version += matches[j] + '.'
} else {
version += matches[j]
}
}
} else {
version = '0'
}
return {
name: data[i].name,
version: parseFloat(version)
}
}
}
return { name: 'Unknown', version: '~' }
}
const agent = header.join(' ')
const os = matchItem(agent, dataos)
const browser = matchItem(agent, databrowser)
// return { os, browser }
return {
os,
browser,
navigator: {
userAgent: navigator.userAgent,
appVersion: navigator.appVersion,
platform: navigator.platform,
vendor: navigator.vendor
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment