summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre Ossman <ossman@cendio.se>2022-12-23 16:58:45 +0100
committerPierre Ossman <ossman@cendio.se>2022-12-27 12:50:57 +0100
commit12a7c6f0de0ca51126c9a7292669c03f483049e0 (patch)
treea13c1160382750627f4dd178f73d4ddd6817e8c0
parenta187821e4f576c0569e7ca9a71ebb525734dda00 (diff)
downloadnovnc-12a7c6f0de0ca51126c9a7292669c03f483049e0.tar.gz
Check for Android using userAgent
Modern Android systems seem to report "Linux" for navigator.platform, so we can no longer rely on that.
-rw-r--r--core/util/browser.js3
-rw-r--r--tests/test.browser.js11
2 files changed, 8 insertions, 6 deletions
diff --git a/core/util/browser.js b/core/util/browser.js
index 8195438..bbc9f5c 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 4b6c127..3b2299f 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;