diff --git a/src/helpers/ua-parser-helpers.d.ts b/src/helpers/ua-parser-helpers.d.ts index a1e3f20..0f46125 100644 --- a/src/helpers/ua-parser-helpers.d.ts +++ b/src/helpers/ua-parser-helpers.d.ts @@ -5,7 +5,7 @@ import { IResult } from "../main/ua-parser"; declare function getDeviceVendor(model: string): string | undefined; -declare function isAppleSilicon(res: IResult): boolean; +declare function isAppleSilicon(res: IResult, useFeatureDetection?: boolean): boolean; declare function isBot(res: IResult): boolean; declare function isChromeFamily(res: IResult): boolean; declare function isElectron(): boolean; diff --git a/src/helpers/ua-parser-helpers.js b/src/helpers/ua-parser-helpers.js index 7234e63..ce2db0c 100644 --- a/src/helpers/ua-parser-helpers.js +++ b/src/helpers/ua-parser-helpers.js @@ -15,21 +15,23 @@ const { isStandalonePWA } = require('is-standalone-pwa'); const getDeviceVendor = (model) => UAParser(`Mozilla/5.0 (Linux; Android 10; ${model}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.0.0 Safari/537.36`).device.vendor; -const isAppleSilicon = (res) => { +const isAppleSilicon = (res, useFeatureDetection) => { if (res.os.is(OS.MACOS)) { if (res.cpu.is(CPU.ARM)) { return true; } - try { - const canvas = document.createElement('canvas'); - const webgl = canvas.getContext('webgl2') || canvas.getContext('webgl') || canvas.getContext('experimental-webgl'); - const debug = webgl.getExtension('WEBGL_debug_renderer_info'); - const renderer = webgl.getParameter(debug.UNMASKED_RENDERER_WEBGL); - if (renderer.match(/apple m\d/i)) { - return true; + if (useFeatureDetection) { + try { + const canvas = document.createElement('canvas'); + const webgl = canvas.getContext('webgl2') || canvas.getContext('webgl') || canvas.getContext('experimental-webgl'); + const debug = webgl.getExtension('WEBGL_debug_renderer_info'); + const renderer = webgl.getParameter(debug.UNMASKED_RENDERER_WEBGL); + if (renderer.match(/apple m\d/i)) { + return true; + } + } catch { + return false; } - } catch { - return false; } } return false;