3

I am using user-agent to distinguish whether the browser is on mobile or desktop. However, if I change the setting to pc-mode in the Android browser, user-agent's value is changed to "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.74 Safari/537.36" .

To make it clear, I applied navigator.maxTouchPoints > 0 to confirm if it is a mobile environment. but chrome on desktop shows navigator.maxTouchPoints's value is 10. I wonder why it comes out like this. Is there any other way to judge mobile devices?

123456lllll
  • 45
  • 1
  • 5
  • This doesn't seem to be the case on `Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36` – Daniel T Feb 25 '23 at 23:11

1 Answers1

1

maxTouchPoints would show a number greater than zero if the desktop or laptop has a touchscreen.

You should test for the features you want to use or not use on mobile. Using the userAgent can get cagey as it can be changed easily and what you witnessed is a common trick used to force desktop mode.

Also note that particularly Chrome is looking to 'reduce' the user-agent string to prevent a sort of fingerprinting. User-Agent Reduction

You can check this answer from a similar question for suggestions: What is the best way to detect a mobile device?

  • take care maxTouchPoints is a bit broken... I dont have touchscreen and in chrome it returns 256 value for me. Adding this fixed the problem for me navigator.maxTouchPoints & 0xFF https://stackoverflow.com/questions/55833326/wrong-maxtouchpoints-and-ontouchstart-in-document-in-chrome-mobile-emulati – strix25 Jul 12 '23 at 08:36