Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Breaking fix - Edge browser.major should be Edge version, not EdgeHTML version #279

Closed
mikemaccana opened this issue Nov 22, 2017 · 4 comments

Comments

@mikemaccana
Copy link

mikemaccana commented Nov 22, 2017

Currently parsedUserAgent.browser.major is incorrect for Edge - it reports parsedUserAgent.engine.major instead. I.E. Edge 41 incorrectly reports a parsedUserAgent.browser.major of 16 - this is the EdgeHTML version but not the browser version.

I'm currently working around this with something like:

var EDGEHTML_VS_EDGE_VERSIONS = {
	12: 0.1,
	13: 21,
	14: 31,
	15: 39,
	16: 41
}; 

var browserMajorVersion = parsedUserAgent.browser.major;
if ( browserName === 'Edge' ) {
	browserMajorVersion = EDGEHTML_VS_EDGE_VERSIONS[browserMajorVersion]
}

It would be cool if UA Parser JS did something similar. It's a breaking change though so should be in a major new version.

@mikemaccana mikemaccana changed the title Breaking fix - Edge should be edge version, not EdgeHTML version Breaking fix - Edge browser.major should be Edge version, not EdgeHTML version Nov 22, 2017
@mikemaccana mikemaccana changed the title Breaking fix - Edge browser.major should be Edge version, not EdgeHTML version Breaking fix - Edge browser.major should be Edge version, not EdgeHTML version Nov 22, 2017
@tb-mtg
Copy link

tb-mtg commented Dec 6, 2018

I tried your demo site with Edge browser and it returned user agent

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763

but incorrectly says browser version is 18.17763, but it actually is 44.17763.1.0 as show below from the app settings:

image

Can you fix so that is show the correct version?

@callaginn
Copy link

@mikemaccana Nice; I was looking for something like this today. I've made a few tweaks:

  • Added two new versions of Edge. Hopefully, we won't have to deal with MS's crap much longer once they make the switch to Chromium.
  • Removed browserMajorVersion, in lieu of editing the parsed JSON result directly.
  • Added back minor point revision for browser.version property
  • Minor organization edits

Here's those adjustments with a user agent I pulled from one of my machines today:

var parser = new UAParser("mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/64.0.3282.140 safari/537.36 edge/17.17134");
var parsed = parser.getResult();

if (parsed.browser.name === 'Edge') {
    var ENGINE_TO_BROWSER = {
        12: 0.1,
        13: 21,
        14: 31,
        15: 39,
        16: 41,
        17: 42,
        18: 44
    };
    parsed.browser.major = ENGINE_TO_BROWSER[parsed.browser.major];
    parsed.browser.version = parsed.browser.major + '.' + parsed.browser.version.split('.')[1];
}

Result will be:

browser: {name: "Edge", version: "42.17134", major: 42}

@wessberg
Copy link

wessberg commented Apr 10, 2021

It took me quite some time to track down the cause of a regression in production in which a Polyfill service I'm maintaining began returning invalid polyfills for Legacy edge because the browser versions have changed. I realize you did add a Breaking Change label to this, but since there was no new major SemVer version and no changelog is maintained, I didn't see it.

It is correct that the version range [12, 18] is technically the EdgeHTML versions, but that's what existing tooling like Caniuse, BrowserStack and MDN Web Docs use to refer to Legacy edge versions. It is also my clear impression that the vast majority of web developers refer to Legacy Edge by their EdgeHTML versions. Additionally, the EdgeHTML version is the only thing that is parseable from the User-Agent, which may be part of the explanation why that is more popular.

Here are a few examples:

BrowserStack:
Screen Shot 2021-04-10 at 3 42 46 PM

Caniuse:

Screen Shot 2021-04-10 at 3 44 50 PM

MDN:

Screen Shot 2021-04-10 at 3 46 13 PM

I actually can't think of a single tool or service that doesn't treat the EdgeHTML version as the browser version.

I would definitely suggest reverting this change to align with other tooling. I realize the original author had to work around this for their use case, but I for one now have to work around this behavior - and I would assume many others will too.

@faisalman
Copy link
Owner

You're right, I originally made a fix for this issue in this branch: https://github.com/faisalman/ua-parser-js/tree/old-edge-fix but I forgot that this branch introduces a breaking change, so it should only be merged later when 0.8.x released, I'll revert this merge for now ..

@faisalman faisalman reopened this Apr 10, 2021
smoroz pushed a commit to optimizely/ua-parser-js that referenced this issue Feb 3, 2023
* FIX: Wechat Desktop for Windows compatible with new version

* Move to check typeof for window for different envs

* Fix faisalman#413 Bug resulting Motorola model O

* Fix faisalman#367 faisalman#425 Detect Instagram in-app browser

* Add funding support links

* Fix faisalman#450 Sony Xperia Z2 Tablet

* Fix faisalman#454 Improve Samsung detection

* Add Nintendo Switch

* Fix faisalman#366 Amazon Alexa Echo Show

* Fix faisalman#339 Add Weibo

* Fix faisalman#407 ZTE Nubia misidentified as Nextbook Tablet

* FIX: new wechat desktop's unsafe regex

* Fix faisalman#433 faisalman#434 Huawei devices

* Fix faisalman#475 Nokia version incomplete

* Fix faisalman#470 Identify Android TV as SmartTV

* Latest Xperia lineup

* Fix faisalman#430 Playstation 5

* Fix faisalman#449 Lenovo Tablet

* Casually save some bytes

* Fix faisalman#401 Rearrange the order of regexes to improve hit-rate performance

* Fix faisalman#427 - Trying GitHub Actions

* Change mocha reporter for CI

* Action doesn't work, should be under /.github/workflows folder perhaps

* Fix faisalman#438 Add Zebra devices

* Update README contents & structures

* Enforce maximum limit to user-agent input

* Move documentation upwards and..mAkE tHe LoG0 BiG99eR!!1!1!

* Add CDN links & insert npm fund

* Fix faisalman#422 Add ARMHF in CPU Arch detection

* Fix faisalman#279 Remap old Edge versions <= 44 as suggested by @mikemaccana @callaginn

* Fix faisalman#448 Add AT&T & Vodafone devices

* Fix faisalman#209 Add CHANGELOG

* Add Electron

* Simplify Huawei detection

* Release as 0.7.25

* Refine some OS detection

* Add new OS: Raspbian

* Add Device: Surface Duo

* Add some test cases for Samsung, Huawei, Xiaomi

* Detect ARMEABI as ARM

* Casually save some bytes

* Refine some detection with more test cases

* Add new device.vendor: Vivo

* Fix faisalman#342 - Enforce all regexes to comply with safe-regex as a safeguard against possible ReDoS vulnerability

* Fix regexes that were marked as unsafe by safe-regex module

* Refine device detection with more test cases

* Add new device.vendor: Realme

* Release as 0.7.26

* Better tablet detection:
- Huawei MediaPad M/T
- Galaxy Tab SM-P
- Kindle Fire without Silk

* Better tablet detection:
- Fix lenovo phone / tablet detection

* Better tablet detection - Build.

* Better tablet detection:
- iPad using Facebook browser on some occasions
- More Huawei tablets
- Asus ZenPad Z8s (P00J)

* Small refactor

* Add new Engine & Browser: Flow

* Add new browser: Firefox Reality

* Add new device: Fairphone

* Add string check to setUA method

* Release as 0.7.27

* More test for latest phones with unique form factor (fold/flip/qwerty/swivel)

* Add new device & browser: Tesla

* Minor rearrangement

* More test for tablet devices

* Update contributor list

* Fix faisalman#492 LG TV WebOS detection

* Delete redundant code

* Refactor code: saving bytes towards 15KB minified

* Update readme: use https for demo link

* Test for Firefox UAs, add new browser: Klar, add new OS: Maemo

Source: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent/Firefox

* Revert breaking fix faisalman#279 and release as 0.7.28

* Improve detection rule for Mac on PowerPC

* Improve device detection: categorize PDA as mobile

* Improve browser detection: Netscape with version

* Improve os detection: Windows Mobile without version

* Add new OS: HP-UX

* Add new browsers: Obigo, UP.Browser

* Add new device vendor: Roku

Source: https://github.com/WhichBrowser/Parser-PHP/blob/master/tests/data/television/roku.yaml

* Refine some OS detection

Source:
- https://www.zytrax.com/tech/web/browser_ids.htm
- https://developers.whatismybrowser.com/useragents/explore/operating_system_name/

* Remove oldEdge map

* Replace `\s` with space, saving ~0,3KB

* ES3 compat-fix: remove trailing comma

* Improve device detection: Huawei, Xiaomi, Realme, LG, OnePlus, ASUS, ZTE, Fairphone

* Improve CPU detection for ARM64

* Improve device detection: LG Android TV

* Add new OS: Android-x86, Deepin, elementary OS, GhostBSD, Linspire, Manjaro, Sabayon

User-Agent source: whatismybrowser.com

* Fix faisalman#500 Sharp devices misjudged as Huawei devices

* Fix faisalman#506 - add test for Huawei ART-L29

* Fix faisalman#509 add support for Internet Explorer 8

* Create SECURITY.md

A simple instruction for security researchers.

* Improve regex efficiency when trimming long ua string

https://blog.stevenlevithan.com/archives/faster-trim-javascript

* Add Huawei models

* Sony Xperia 1ii

* Samsung Galaxy S20 5G

* Add different oculus browser

* Oculus devices

* cleanup

* cleanup

* change to single line regex

* Enable to detect OPPO Reno5 A correctly.

* Securing the 0.7.x version (issue faisalman#536)

* Securing the 0.8.x version (issue faisalman#536)

* Securing the 1.x version (issue faisalman#536)

* feat: require the use of `===` and `!==`

* Update ua-parser.js

* ✨ Use AST to verify whether regexes are safe

* Bump version 0.7.31

* Fix faisalman#559: Sony Xperia 1 III misidentified as Acer tablet

* Fix faisalman#533: Detect Sony BRAVIA as SmartTV

* Fix faisalman#562 - Xiaomi Mi CC9

* Fix faisalman#561 - Increase UA_MAX_LENGTH to 275

* pr feedback

* v100 tests

* Add support for HuaweiBrowser

* update readme

* package.json: specify the folders to include

* add KakaoTalk App, KakaoStory App regex

* Add Kakao App, Naver App

* Add iOS Naver, Kakao regex

* fix browser-test typo

* Add LinkedIn app.

* Rename 'HuaweiBrowser' to 'Huawei Browser'

* Fix faisalman#565 - Add new OS: HarmonyOS

* Fix faisalman#558 - WeGame mistakenly identified as WeChat

* Increase UA_MAX_LENGTH to 350

* Fix faisalman#532 - Detect Xiaomi Mi TV as smarttv

* Fix faisalman#513 - Add new browser: DuckDuckGo

* Fix faisalman#516 - Add Focus into list of possible browser.name

* ci: add GitHub token permissions for workflow

Signed-off-by: Varun Sharma <[email protected]>

* fixed sony bravia smart tv, added sharp AQUOS TV

* Safari and Mobile Safari began to include commas in the minor version numbers.

* Fix faisalman#502 faisalman#580 : Add notice for desktop device type

* Refine small redundancy

* Fix faisalman#596 - Detect Galaxy Tab S8 as tablet

* Add test case

* improved documentation

* Bump version 0.7.32

* Add new browser: Cobalt

* Fix documentation

`readme.md` refers to a `parser.getResults` function, which does not exist. This PR corrects the function name to `getResult`.

* Support Panasonic Viera Smart TVs

* Support Panasonic 2018+ smart tvs

* Add test for panasonic 2020 smart tv

* Add test for panasonic SAT receiver

* Support Loewe Smart TVs

* Add tests for JVC smart tvs

* Support philips smart tvs

* Add samsung testcases

* Add support for TechniSAT TVs and SATs

* Fix faisalman#605 - Identify Macintosh as Apple device

* Remove unsafe regex in trim() function

`trim()` function contains a regular expression that is vulnerable to ReDoS but was uncaught by `safe-regex` module.

* Bump version 0.7.33

* Fix faisalman#557 faisalman#612 faisalman#629 - Update the changelog

* Fix faisalman#621 - Detect Oculus Quest Pro

* Utilize navigator.userAgentData as a fallback faisalman#588

* Improve Kakao/Naver detection + add test

* Fix faisalman#619 - Move Sharp up to be checked before Huawei

* Rearrange the recently added smarttv detection

* Fix faisalman#620 - Add new Device: Kobo

* Fix faisalman#601 - Detect Chrome OS without version

* Update manifest

* fix: Don't act as a jQuery plugin

* build: 0.7.24 custom version

* Rebuilt min versions

---------

Signed-off-by: Varun Sharma <[email protected]>
Co-authored-by: ruicong <[email protected]>
Co-authored-by: David Annez <[email protected]>
Co-authored-by: Faisal Salman <[email protected]>
Co-authored-by: sUP <[email protected]>
Co-authored-by: o.drapeza <[email protected]>
Co-authored-by: liujunlve <[email protected]>
Co-authored-by: Ziding Zhang <[email protected]>
Co-authored-by: Paris Morgan <[email protected]>
Co-authored-by: Ryohei Shima <[email protected]>
Co-authored-by: chenhui9279 <[email protected]>
Co-authored-by: sunny-mwx <[email protected]>
Co-authored-by: Hans Ott <[email protected]>
Co-authored-by: XhmikosR <[email protected]>
Co-authored-by: KnifeLemon <[email protected]>
Co-authored-by: Dante <[email protected]>
Co-authored-by: JBYoshi <[email protected]>
Co-authored-by: Varun Sharma <[email protected]>
Co-authored-by: Jacky Choo <[email protected]>
Co-authored-by: nabetama <[email protected]>
Co-authored-by: kNoAPP <[email protected]>
Co-authored-by: Mok <[email protected]>
Co-authored-by: Oscar Becerra <[email protected]>
Co-authored-by: Riley Shaw <[email protected]>
Co-authored-by: Garrit Franke <[email protected]>
Co-authored-by: Garrit Franke <[email protected]>
Co-authored-by: smoroz <smoroz>
Co-authored-by: Spencer Wilson <[email protected]>
Co-authored-by: Luis Rivas <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants