Check for Android using userAgent

Modern Android systems seem to report "Linux" for navigator.platform, so
we can no longer rely on that.
This commit is contained in:
Pierre Ossman 2022-12-23 16:58:45 +01:00
parent a187821e4f
commit 12a7c6f0de
2 changed files with 8 additions and 6 deletions

View File

@ -94,7 +94,8 @@ export function isIOS() {
} }
export function isAndroid() { export function isAndroid() {
return !!(/android/i).exec(navigator.platform); /* Android sets navigator.platform to Linux :/ */
return !!navigator.userAgent.match('Android ');
} }
export function isChromeOS() { export function isChromeOS() {

View File

@ -73,13 +73,14 @@ describe('OS detection', function () {
}); });
it('should handle Android', function () { it('should handle Android', function () {
const platforms = [ let userAgents = [
"Android", "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"; navigator.platform = "Linux x86_64";
platforms.forEach((platform) => { userAgents.forEach((ua) => {
navigator.platform = platform; navigator.userAgent = ua;
expect(isMac()).to.be.false; expect(isMac()).to.be.false;
expect(isWindows()).to.be.false; expect(isWindows()).to.be.false;
expect(isIOS()).to.be.false; expect(isIOS()).to.be.false;