From 12a7c6f0de0ca51126c9a7292669c03f483049e0 Mon Sep 17 00:00:00 2001 From: Pierre Ossman Date: Fri, 23 Dec 2022 16:58:45 +0100 Subject: [PATCH] Check for Android using userAgent Modern Android systems seem to report "Linux" for navigator.platform, so we can no longer rely on that. --- core/util/browser.js | 3 ++- tests/test.browser.js | 11 ++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/core/util/browser.js b/core/util/browser.js index 81954383..bbc9f5c1 100644 --- a/core/util/browser.js +++ b/core/util/browser.js @@ -94,7 +94,8 @@ export function isIOS() { } export function isAndroid() { - return !!(/android/i).exec(navigator.platform); + /* Android sets navigator.platform to Linux :/ */ + return !!navigator.userAgent.match('Android '); } export function isChromeOS() { diff --git a/tests/test.browser.js b/tests/test.browser.js index 4b6c1273..3b2299f6 100644 --- a/tests/test.browser.js +++ b/tests/test.browser.js @@ -73,13 +73,14 @@ describe('OS detection', function () { }); it('should handle Android', function () { - const platforms = [ - "Android", + let userAgents = [ + "Mozilla/5.0 (Linux; Android 13; SM-G960U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.128 Mobile Safari/537.36", + "Mozilla/5.0 (Android 13; Mobile; LG-M255; rv:108.0) Gecko/108.0 Firefox/108.0", ]; - navigator.userAgent = "Mozilla/5.0 (Android; Mobile; rv:13.0) Gecko/13.0 Firefox/13.0"; - platforms.forEach((platform) => { - navigator.platform = platform; + navigator.platform = "Linux x86_64"; + userAgents.forEach((ua) => { + navigator.userAgent = ua; expect(isMac()).to.be.false; expect(isWindows()).to.be.false; expect(isIOS()).to.be.false;