User-Agent クライアント ヒントを使用してWindows 11と CPU アーキテクチャを検出する
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 94 以降 | はい |
Chrome 95 以降 | はい |
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
必要があります。 次の図は、 を含む要求ヘッダーをサーバーに送信し、 を含Accept-CH: sec-ch-ua-platform
むuser agent: <UA string>
応答ヘッダーを受信するブラウザーを示しています。
この最初の要求の間、クライアントは設定を Accept-CH
記録し、それ以降の要求には既定で が含まれます sec-ch-ua-platform
。
このフローをさらに最適化するために、ヘッダーに加えて新しい Critical-CH
ヘッダーを Accept-CH
使用して、ページの再読み込みを必要とせずに、要求ヘッダーをすぐに再発行できます。 次の図は、 や を含Accept-CH: sec-ch-ua-platform
む応答ヘッダーを含むuser agent: <UA string>
、サーバーに要求ヘッダーを送信するブラウザーをCritical-CH: sec-ch-ua-platform
示しています。 ブラウザーは、要求ヘッダーをすぐにサーバーに送信します。
Microsoft Edge バージョン 96 以降では、新しい Critical-CH
ヘッダーを使用して、最適化されたパフォーマンスで目的の高エントロピ ヘッダーを受け取ることができます。
Critical-CH
と Accept-CH
の設定は、セッション Cookie がクリアされるまで、またはユーザーが特定の配信元のサイト データまたは Cookie をクリアするまで保持されます。 の詳細については Critical-CH
、「 クライアント ヒントの信頼性」を参照してください。
特定の Windows バージョンの検出
ヒント (およびヘッダーを介して) に対して API によってnavigator.userAgentData.getHighEntropyValues
返されるプラットフォーム バージョンのSec-CH-UA-Platform-Version
定義は、User-Agent クライアント ヒント ドラフト コミュニティ グループ レポートで指定されます。"platformVersion"
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+ |