browserslist-useragent-regexp icon indicating copy to clipboard operation
browserslist-useragent-regexp copied to clipboard

Wrong support for new Ms Edge based on Chromium

Open DOrlov77 opened this issue 5 years ago • 9 comments

In a new Edge the userAgent name is "Edg", not "Edge". So your scripts is ignoring the Edge query but use Chrome query fo both.

DOrlov77 avatar Sep 22 '20 10:09 DOrlov77

@DOrlov77 Hi! All Chrome-based browsers are detected as Chrome.

dangreen avatar Sep 22 '20 10:09 dangreen

Hi. But that is exactly a defect! Opera is also based on Chromium.

Say I have .browserslistrc like:

Chrome > 70
Edge > 82
Opera > 67

So running npx browserslist I will receive:

chrome 85
chrome 84
// ... cutted the list
chrome 52
chrome 51
edge 85
edge 84
edge 83
opera 71
opera 70
opera 69
opera 68

As you may see the browserslist knows about versions of Edge and Opera, but I have no chance to filter out unwanted versions of these browsers...

DOrlov77 avatar Sep 23 '20 05:09 DOrlov77

@DOrlov77 currently browserslist-useragent-regexp is more like "engine-list", to work with/detect engine web-platform features.

dangreen avatar Sep 23 '20 05:09 dangreen

@dangreen probably, you want to say: "without engine web-platform features detection"? Right now you parse browserslist result into regex in the straightforward way. Detection means: or move all detected browsers to one by engine, say Chrome, Edge >= 79, Opera > ? ==> Chrome, Edge < 79 ==> Edge; or make it granually, like Chrome => Chrome Edge < 79 ==> Edge Edge >=79 ==> Edg Opera ==> Opr ... Anyway - I like your tool and will, probably, use it in my project. Thank you!

DOrlov77 avatar Sep 23 '20 07:09 DOrlov77

@DOrlov77 "to detect engine web-platform features", example: bdsl-webpack-plugin

I see more and more issues with vendor detection (not engine), so I think to add new flag to toggle vendor/engine mode soon.

dangreen avatar Sep 23 '20 08:09 dangreen

I'm seeing Microsoft Edge on Android (Edge 46.05.4.5158) not match the generated regex having been updated 5 days ago. My assumption is, if all Chrome-based browsers are being detected as Chrome (as per comment above) then this should pass.

Here's my .browerslistrc file

defaults
unreleased versions

I'm running the following script to generate the regex script:

(echo export default && browserslist-useragent-regexp --allowHigherVersions --ignorePatch --ignoreMinor) > ./src/js/_SupportedBrowsers.js

This generates the following file:

export default 
/((CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS)[ +]+(13|(1[4-9]|[2-9]\d|\d{3,})|14|(1[5-9]|[2-9]\d|\d{3,}))[_.]\d+(?:[_.]\d+)?)|(Opera Mini(?:\/att)?\/?(\d+)?(?:\.\d+)?(?:\.\d+)?)|(Opera\/.+Opera Mobi.+Version\/(62|(6[3-9]|[7-9]\d|\d{3,}))\.\d+)|(Opera\/(62|(6[3-9]|[7-9]\d|\d{3,}))\.\d+.+Opera Mobi)|(Opera Mobi.+Opera(?:\/|\s+)(62|(6[3-9]|[7-9]\d|\d{3,}))\.\d+)|(SamsungBrowser\/(13|(1[4-9]|[2-9]\d|\d{3,}))\.\d+)|(Edge\/(90|(9[1-9]|\d{3,}))(?:\.\d+)?)|((Chromium|Chrome)\/(89|(9\d|\d{3,}))\.\d+(?:\.\d+)?)|(Version\/(0|([1-9]|\d{2,})|14|(1[5-9]|[2-9]\d|\d{3,})|15|(1[6-9]|[2-9]\d|\d{3,}))\.\d+(?:\.\d+)? Safari\/)|(Trident\/7\.0)|(Firefox\/(78|(79|[8-9]\d|\d{3,})|88|(89|9\d|\d{3,}))\.\d+\.\d+)|(Firefox\/(78|(79|[8-9]\d|\d{3,})|88|(89|9\d|\d{3,}))\.\d+(pre|[ab]\d+[a-z]*)?)|(([MS]?IE) (11|(1[2-9]|[2-9]\d|\d{3,}))\.\d+)/

ajbeaven avatar Jul 01 '21 01:07 ajbeaven

@ajbeaven Hi! Can you please provide user agent of Microsoft Edge on Android ?

dangreen avatar Jul 09 '21 12:07 dangreen

Ahh, durr - sorry.

Mozilla/5.0 (Linux; Android 10; M2007J20CG) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.116 Mobile Safari/537.36 EdgA/46.05.4.5158

ajbeaven avatar Jul 11 '21 02:07 ajbeaven

@ajbeaven Hi. You can try v4.0.0-beta.0, but anyway, browserslist does provide info about Edge Desktop, not Android, so regex for Edge will match only desktop useragents.

dangreen avatar Oct 15 '22 15:10 dangreen