From f3e07135010d15f1d0ffcbebc5ee6be5904f605d Mon Sep 17 00:00:00 2001 From: かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Mon, 6 Oct 2025 10:06:53 +0900 Subject: enhance(frontend): お問い合わせページからデバイス情報を出力できるように (#16598) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * enhance(frontend): デバイス情報を出力できるように * fix lint * Update Changelog * enhance: getHighEntropyValuesが使用できなかった場合のフォールバックを追加 * fix lint * fix: getHighEntropyValuesが使用できない場合は生のUAを返すように * enhance: getHighEntropyValuesが使用できる場合でも生のUAを含めるように * :v: * onHeaderClicked -> onOpened --- .../frontend/src/utility/get-user-environment.ts | 66 ++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 packages/frontend/src/utility/get-user-environment.ts (limited to 'packages/frontend/src/utility/get-user-environment.ts') diff --git a/packages/frontend/src/utility/get-user-environment.ts b/packages/frontend/src/utility/get-user-environment.ts new file mode 100644 index 0000000000..3b8d43fb2c --- /dev/null +++ b/packages/frontend/src/utility/get-user-environment.ts @@ -0,0 +1,66 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * SPDX-License-Identifier: AGPL-3.0-only + */ + +export type UserEnvironment = { + os: string; + browser: string; + userAgent: string; + screenWidth: number; + screenHeight: number; + viaGetHighEntropyValues: true; +} | { + userAgent: string; + screenWidth: number; + screenHeight: number; + viaGetHighEntropyValues: false; +}; + +export async function getUserEnvironment(): Promise { + if ('userAgentData' in navigator && navigator.userAgentData != null) { + try { + const uaData: any = await navigator.userAgentData.getHighEntropyValues([ + 'fullVersionList', + 'platformVersion', + ]); + + let osVersion = 'v' + uaData.platformVersion; + + if (uaData.platform === 'Windows' && uaData.platformVersion != null) { + // https://learn.microsoft.com/ja-jp/microsoft-edge/web-platform/how-to-detect-win11 + const majorPlatformVersion = parseInt(uaData.platformVersion.split('.')[0]); + if (majorPlatformVersion >= 13) { + osVersion = '11 or later'; + } else if (majorPlatformVersion > 0) { + osVersion = '10'; + } else { + osVersion = '8.1 or earlier'; + } + } + + const browserData = uaData.fullVersionList.find((item) => !/^\s*not.+a.+brand\s*$/i.test(item.brand)); + return { + os: `${uaData.platform} ${osVersion}`, + browser: browserData ? `${browserData.brand} v${browserData.version}` : 'Unknown', + userAgent: navigator.userAgent, + screenWidth: window.innerWidth, + screenHeight: window.innerHeight, + viaGetHighEntropyValues: true, + }; + } catch { + return getViaUa(); + } + } else { + return getViaUa(); + } +} + +function getViaUa(): UserEnvironment { + return { + userAgent: navigator.userAgent, + screenWidth: window.innerWidth, + screenHeight: window.innerHeight, + viaGetHighEntropyValues: false, + }; +} -- cgit v1.2.3-freya