Web サイトでは、User-Agent クライアント ヒント (UA-CH) を使用して、Windows 11とWindows 10のユーザーを区別し、デバイスの CPU アーキテクチャを検出できます。 User-Agent クライアント ヒント形式は、Web サイトにユーザー エージェント情報を提供するためにブラウザーによって使用されます。
Web サイトでは、ブラウザーから送信されたユーザー エージェント情報を使用して、次のような情報を検出することもできます。
- ブラウザー ブランド。
- ブラウザーのバージョン番号。
- ブラウザーが実行されているデバイス プラットフォーム。
サイトがユーザー エージェント情報にアクセスするには、次の 2 つの方法があります。
- User-Agent 文字列 (レガシ)。
- User-Agent クライアント ヒント (推奨)。
これら 2 つの方法の詳細については、「 Web サイトからの Microsoft Edge の検出」を参照してください。
Microsoft Edge (および Google Chrome でも) では、サイトはWindows 11とWindows 10のユーザーを区別でき、User-Agent クライアント ヒント (UA-CH) を使用してデバイスの CPU アーキテクチャを検出できます。 この情報は、次の UA-CH 要求ヘッダーにあります。
| ヘッダー フィールド | Windows 10を示す値 | Windows 11を示す値 |
|---|---|---|
Sec-CH-UA-Platform |
Windows |
Windows |
Sec-CH-UA-Platform-Version |
1.0.0 と の間の値10.0.0 |
13.0.0 以上 |
User-Agent 文字列は、Windows 11とWindows 10を区別したり、CPU アーキテクチャを区別したりするために更新されません。 User-Agent 文字列を使用してユーザー エージェント データを取得することはお勧めしません。 User-Agent クライアント ヒントをサポートしていないブラウザーでは、Windows 11とWindows 10、または CPU アーキテクチャを区別できません。
User-Agent クライアント ヒントをサポートするブラウザー
次の表は、Windows 11とWindows 10の区別をサポートするブラウザーと、異なる CPU アーキテクチャ間の区別をサポートするブラウザーを示しています。
| ブラウザー | User-Agent クライアント ヒントによる差別化をサポートしますか? |
|---|---|
| Microsoft Edge | はい |
| Chrome | はい |
| Opera | はい |
| Firefox | 不要 |
| Internet Explorer 11 | 不要 |
Windows 11を検出するためのサンプル コード
次のコードは、Windows 11を検出します。
navigator.userAgentData.getHighEntropyValues(["platformVersion"])
.then(ua => {
if (navigator.userAgentData.platform === "Windows") {
const majorPlatformVersion = parseInt(ua.platformVersion.split('.')[0]);
if (majorPlatformVersion >= 13) {
console.log("Windows 11 or later");
}
else if (majorPlatformVersion > 0) {
console.log("Windows 10");
}
else {
console.log("Before Windows 10");
}
}
else {
console.log("Not running on Windows");
}
});
ARM または x86 を検出するためのサンプル コード
CPU アーキテクチャの検出を使用して、ユーザーの CPU 専用に構築されたアプリのバージョンを Web サイトに自動的にダウンロードさせます。
CPU 検出は、ARM ベースのデバイスに特に役立ちます。ARM デバイスを使用しているお客様は、アプリケーションのネイティブ ARM バージョンを自動的にダウンロードします。 これにより、ユーザーが x86 用にビルドされたアプリを誤ってインストールし、エミュレーションによるパフォーマンスの低下が発生するのを防ぐことができます。
次のコードは、CPU アーキテクチャを検出します。
navigator.userAgentData.getHighEntropyValues(["architecture", "bitness"])
.then(ua => {
if (navigator.userAgentData.platform === "Windows") {
if (ua.architecture === 'x86') {
if (ua.bitness === '64') {
console.log("x86_64");
}
else if (ua.bitness === '32') {
console.log("x86");
}
}
else if (ua.architecture === 'arm') {
if (ua.bitness === '64') {
console.log("ARM64");
}
else if (ua.bitness === '32') {
console.log("ARM32");
}
}
}
else {
console.log("Not running on Windows");
}
});
検出パフォーマンスの最適化 Critical-CH
現在、Web サイト サーバーは、 Accept-CH 応答ヘッダーをブラウザー クライアントに送信して、既定では Sec-CH-UA ヘッダーに送信されないより高いエントロピ フィールドを要求する必要があります。 次の図は、 user agent: <UA string> を含む要求ヘッダーをサーバーに送信し、 Accept-CH: sec-ch-ua-platformを含む応答ヘッダーを受信するブラウザーを示しています。
この初期要求の間、クライアントは Accept-CH 設定を記録し、それ以降の要求では既定で sec-ch-ua-platform が含まれます。
このフローをさらに最適化するために、Accept-CH ヘッダーに加えて新しいCritical-CH ヘッダーを使用して、ページの再読み込みを必要とせずに、要求ヘッダーを直ちに再発行できます。 次の図は、 user agent: <UA string> を含む要求ヘッダーをサーバーに送信し、 Accept-CH: sec-ch-ua-platform や Critical-CH: sec-ch-ua-platformを含む応答ヘッダーを受信するブラウザーを示しています。 ブラウザーは、要求ヘッダーをすぐにサーバーに送信します。
Critical-CH ヘッダーを使用して、最適化されたパフォーマンスで目的の高エントロピ ヘッダーを受け取ることができます。
Critical-CHとAccept-CHの設定は、セッション Cookie がクリアされるまで、またはユーザーが特定の配信元のサイト データまたは Cookie をクリアするまで保持されます。
Critical-CHの詳細については、「クライアント ヒントの信頼性」を参照してください。
特定の Windows バージョンの検出
"platformVersion" ヒント (および Sec-CH-UA-Platform-Version ヘッダーを介して) のnavigator.userAgentData.getHighEntropyValues API によって返されるプラットフォーム バージョンの定義は、User-Agent クライアント ヒント ドラフト コミュニティ グループ レポートで指定されています。 Windows 10以降では、値は Windows.Foundation.UniversalApiContract バージョンに基づいています。
特定のバージョンの Windows を検出するには、User-Agent クライアント ヒントの platformVersion に次の値を使用します。
| バージョン | の最初のバージョン コンポーネント platformVersion |
|---|---|
| Win7/8/8.1 | 0 |
| Win10 1507 | 1 |
| Win10 1511 | 2 |
| Win10 1607 | 3 |
| Win10 1703 | 4 |
| Win10 1709 | 5 |
| Win10 1803 | 6 |
| Win10 1809 | 7 |
| Win10 1903 | 8 |
| Win10 1909 | 8 |
| Win10 2004 | 10 |
| Win10 20H2 | 10 |
| Win10 21H1 | 10 |
| Win10 21H2 | 10 |
| Win11 | 13+ |