-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdetect-device.js
More file actions
80 lines (78 loc) · 3.04 KB
/
detect-device.js
File metadata and controls
80 lines (78 loc) · 3.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/**
* Detect-Andriod.js: User-Agent Parser
*
* @version 1.0.0
* @author Anuwat Sukhsa
*
*/
class DetectDevice {
async findModel(model) {
let deviceList = await (await fetch('js/detect/android_devices.json')).json();
return deviceList.find(o => o.model === model);
}
isIpad(source){
const regExp = /iPad/g;
const matches = source.match(regExp);
if(matches == null){
return false;
}
return true;
}
async parse() {
var ua = detect.parse(navigator.userAgent);
var result = {
source: ua.source,
device_type: ua.device.type,
device_model : '',
os: ua.os.family,
os_version: ua.os.version,
browser: ua.browser.family,
browser_version : ua.browser.version,
}
try {
document.getElementById('source').innerHTML = result.source
const regExp = /\(([^)]+)\)/g;
const matches = [...ua.source.match(regExp)];
var modelSource = matches[0].replace(/\(|\)/g,'');
var modelExploded= modelSource.split(';');
var modelName = 'not found';
if(modelExploded.length > 0){
modelName = modelExploded[modelExploded.length - 1].trim();
}
if (result.device_type == 'Mobile' && result.os == 'iOS') {
result.device_model = modelExploded[0];
if(this.isIpad(result.source)){
result.device_type ='iPad'
}else{
result.device_type ='Mobile'
}
} else if (result.device_type == 'Mobile' && result.os == 'Android') {
let modelInfo = await this.findModel(modelName);
result.os_version = modelExploded[1];
if(modelInfo){
result.device_model = modelInfo.brand+' '+modelInfo.marketing
}else{
result.device_model = modelName;
}
}else if(result.device_type == 'Desktop' && ua.device.manufacturer == 'Apple'){
result.device_model = 'MacBook';
}
this.showDetail(result);
} catch (e) {
console.log(e.message);
console.log(e.stack);
const [, lineno, colno] = e.stack.match(/(\d+):(\d+)/);
console.log('Line:', lineno);
console.log('Column:', colno);
document.getElementById('showError').innerHTML = e +'Line : '+lineno;
}
}
async showDetail(result){
document.getElementById('source').innerHTML = result.source
document.getElementById('device_type').innerHTML = result.device_type
document.getElementById('device_model').innerHTML = result.device_model
document.getElementById('os').innerHTML = result.os+` (${result.os_version})`;
document.getElementById('browser').innerHTML = result.browser+` (${result.browser_version})`;
}
}
const detectDevice = new DetectDevice();