From 9bf78c750697cc6ef17125f6113fe1cf7a805449 Mon Sep 17 00:00:00 2001 From: Hiroshiba Date: Thu, 17 Aug 2023 23:45:11 +0900 Subject: [PATCH] =?UTF-8?q?=E3=83=96=E3=83=A9=E3=82=A6=E3=82=B6=E7=89=88?= =?UTF-8?q?=E3=81=AEmacOS=E5=88=A4=E5=AE=9A=E3=81=8C=E3=81=8A=E3=81=8B?= =?UTF-8?q?=E3=81=97=E3=81=84=E3=81=AE=E3=82=92=E7=9B=B4=E3=81=99=20(#1504?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/type/globals.d.ts | 7 +++++++ src/type/preload.ts | 24 ++++++++++++++++++++---- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/type/globals.d.ts b/src/type/globals.d.ts index 74fa2173cd..6c761fa17f 100644 --- a/src/type/globals.d.ts +++ b/src/type/globals.d.ts @@ -12,4 +12,11 @@ declare global { interface Window { readonly [SandboxKey]: import("./preload").Sandbox; } + + interface Navigator { + // navigator.userAgentDataを認識してくれないため + userAgentData: { + readonly platform: string; + }; + } } diff --git a/src/type/preload.ts b/src/type/preload.ts index 70612bb46f..5ead93d08a 100644 --- a/src/type/preload.ts +++ b/src/type/preload.ts @@ -5,10 +5,26 @@ import { Result } from "@/type/result"; export const isElectron = import.meta.env.VITE_TARGET === "electron"; export const isBrowser = import.meta.env.VITE_TARGET === "browser"; -export const isMac = - typeof process === "undefined" - ? navigator.userAgent.includes("Mac") - : process.platform === "darwin"; + +// electronのメイン・レンダラープロセス内、ブラウザ内どこでも使用可能なmacOS判定 +function checkIsMac(): boolean { + let isMac: boolean | undefined = undefined; + if (process?.platform) { + // electronのメインプロセス用 + isMac = process.platform === "darwin"; + } else if (navigator?.userAgentData) { + // electronのレンダラープロセス用、Chrome系統が実装する実験的機能 + isMac = navigator.userAgentData.platform.toLowerCase().includes("mac"); + } else if (navigator?.platform) { + // ブラウザ用、非推奨機能 + isMac = navigator.platform.toLowerCase().includes("mac"); + } else { + // ブラウザ用、不正確 + isMac = navigator.userAgent.toLowerCase().includes("mac"); + } + return isMac; +} +export const isMac = checkIsMac(); export const engineIdSchema = z.string().brand<"EngineId">(); export type EngineId = z.infer;