mirror of
https://github.com/faisalman/ua-parser-js.git
synced 2025-09-28 00:18:45 +03:00
Improve device.type
detection using client hints "form-factor" data
This commit is contained in:
parent
d168b75a3a
commit
2046b77ede
@ -43,6 +43,7 @@
|
||||
USER_AGENT = 'user-agent',
|
||||
UA_MAX_LENGTH = 350,
|
||||
BRANDS = 'brands',
|
||||
FORMFACTOR = 'formFactor',
|
||||
FULLVERLIST = 'fullVersionList',
|
||||
PLATFORM = 'platform',
|
||||
PLATFORMVER = 'platformVersion',
|
||||
@ -51,6 +52,7 @@
|
||||
CH_HEADER_FULL_VER_LIST = CH_HEADER + '-full-version-list',
|
||||
CH_HEADER_ARCH = CH_HEADER + '-arch',
|
||||
CH_HEADER_BITNESS = CH_HEADER + '-' + BITNESS,
|
||||
CH_HEADER_FORM_FACTOR = CH_HEADER + '-form-factor',
|
||||
CH_HEADER_MOBILE = CH_HEADER + '-' + MOBILE,
|
||||
CH_HEADER_MODEL = CH_HEADER + '-' + MODEL,
|
||||
CH_HEADER_PLATFORM = CH_HEADER + '-' + PLATFORM,
|
||||
@ -256,6 +258,15 @@
|
||||
'8.1' : 'NT 6.3',
|
||||
'10' : ['NT 6.4', 'NT 10.0'],
|
||||
'RT' : 'ARM'
|
||||
},
|
||||
|
||||
formFactorMap = {
|
||||
'embedded' : 'Automotive',
|
||||
'mobile' : 'Mobile',
|
||||
'tablet' : 'Tablet',
|
||||
'smarttv' : 'TV',
|
||||
'wearable' : ['VR', 'XR'],
|
||||
'?' : 'Unknown'
|
||||
};
|
||||
|
||||
//////////////
|
||||
@ -930,6 +941,7 @@
|
||||
[PLATFORM, stripQuotes(uach[CH_HEADER_PLATFORM])],
|
||||
[PLATFORMVER, stripQuotes(uach[CH_HEADER_PLATFORM_VER])],
|
||||
[ARCHITECTURE, stripQuotes(uach[CH_HEADER_ARCH])],
|
||||
[FORMFACTOR, stripQuotes(uach[CH_HEADER_FORM_FACTOR])],
|
||||
[BITNESS, stripQuotes(uach[CH_HEADER_BITNESS])]
|
||||
]);
|
||||
} else {
|
||||
@ -1044,6 +1056,9 @@
|
||||
if (uaCH[MODEL]) {
|
||||
this.set(MODEL, uaCH[MODEL]);
|
||||
}
|
||||
if (uaCH[FORMFACTOR]) {
|
||||
this.set(TYPE, strMapper(uaCH[FORMFACTOR], formFactorMap));
|
||||
}
|
||||
break;
|
||||
case UA_OS:
|
||||
var osName = uaCH[PLATFORM];
|
||||
|
@ -462,4 +462,23 @@ describe('Map UA-CH headers', function () {
|
||||
assert.strictEqual(ua.device.is("tablet"), false);
|
||||
});
|
||||
});
|
||||
|
||||
it('Can detect form-factor from client-hints', function () {
|
||||
|
||||
const FFVR = {
|
||||
'sec-ch-ua-form-factor' : 'VR'
|
||||
};
|
||||
|
||||
const FFUnknown = {
|
||||
'sec-ch-ua-form-factor' : 'Unknown'
|
||||
};
|
||||
|
||||
UAParser(FFVR).withClientHints().then(function (ua) {
|
||||
assert.strictEqual(ua.device.type, 'wearable');
|
||||
});
|
||||
|
||||
UAParser(FFUnknown).withClientHints().then(function (ua) {
|
||||
assert.strictEqual(ua.device.type, undefined);
|
||||
});
|
||||
});
|
||||
});
|
Loading…
x
Reference in New Issue
Block a user