diff options
| author | かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com> | 2025-10-06 10:06:53 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-10-06 10:06:53 +0900 |
| commit | f3e07135010d15f1d0ffcbebc5ee6be5904f605d (patch) | |
| tree | 8802ba7fb787125a9a4765427a88af1b14e073c9 /packages/frontend/src/utility/get-user-environment.ts | |
| parent | fix(frontend): 存在しない翻訳を修正 (#16604) (diff) | |
| download | misskey-f3e07135010d15f1d0ffcbebc5ee6be5904f605d.tar.gz misskey-f3e07135010d15f1d0ffcbebc5ee6be5904f605d.tar.bz2 misskey-f3e07135010d15f1d0ffcbebc5ee6be5904f605d.zip | |
enhance(frontend): お問い合わせページからデバイス情報を出力できるように (#16598)
* enhance(frontend): デバイス情報を出力できるように
* fix lint
* Update Changelog
* enhance: getHighEntropyValuesが使用できなかった場合のフォールバックを追加
* fix lint
* fix: getHighEntropyValuesが使用できない場合は生のUAを返すように
* enhance: getHighEntropyValuesが使用できる場合でも生のUAを含めるように
* :v:
* onHeaderClicked -> onOpened
Diffstat (limited to 'packages/frontend/src/utility/get-user-environment.ts')
| -rw-r--r-- | packages/frontend/src/utility/get-user-environment.ts | 66 |
1 files changed, 66 insertions, 0 deletions
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<UserEnvironment> { + 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, + }; +} |