summaryrefslogtreecommitdiff
path: root/packages/frontend/src/utility/get-user-environment.ts
diff options
context:
space:
mode:
authorかっこかり <67428053+kakkokari-gtyih@users.noreply.github.com>2025-10-06 10:06:53 +0900
committerGitHub <noreply@github.com>2025-10-06 10:06:53 +0900
commitf3e07135010d15f1d0ffcbebc5ee6be5904f605d (patch)
tree8802ba7fb787125a9a4765427a88af1b14e073c9 /packages/frontend/src/utility/get-user-environment.ts
parentfix(frontend): 存在しない翻訳を修正 (#16604) (diff)
downloadmisskey-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.ts66
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,
+ };
+}