从网站检测 Microsoft Edge
Microsoft Edge 使网站能够检索用户代理信息。 使用用户代理信息为每个用户的浏览器正确显示网页。 浏览器为网站提供了检测浏览器信息(如品牌、版本号和主机操作系统)的机制。
用户代理客户端提示 是检索浏览器信息的最佳方式。 请参阅下面的 用户代理客户端提示。
用户代理字符串 是检索浏览器信息的旧方法。 它们已过时,并且有导致网站兼容性问题的历史。 请参阅下面的 用户代理字符串。
你可能希望根据用户的浏览器为用户提供不同的体验。 例如,如果包含有关如何配置 Microsoft Edge 或其他浏览器以用于站点的步骤,则可能需要检测浏览器,然后显示相应的内容。
浏览器检测机制:
机制 | 服务器端 | 客户端 |
---|---|---|
建议) (用户代理客户端提示 |
Sec-CH-UA HTTPS 标头 |
navigator.userAgentData JavaScript 方法 |
旧版) (用户代理字符串 |
User-Agent HTTPS 标头 |
navigator.userAgent JavaScript 方法 |
功能检测
Microsoft 建议尽可能 检测浏览器中是否支持某个功能 ,而不是检测浏览器。
如果必须检测浏览器,Microsoft 建议将 User-Agent 客户端提示与 功能检测结合使用,如下所示。
User-Agent 客户端提示
Microsoft Edge 支持 User-Agent 客户端提示。
User-Agent 客户端提示是一种解决隐私问题的方法,同时允许网页检测浏览器信息,例如浏览器名称、版本号、平台等。 很快,User-Agent 字符串将被各种浏览器冻结和弃用。 例如,Chrome 平台状态网站介绍了 功能:减少用户代理字符串信息中的更改。
在想要 User-Agent:
- 确定新的浏览器活动是否来自预期用户。
- 如果用户不熟悉此网站,则自定义提示或说明。
请勿使用 User-Agent 客户端提示来:
- 阻止 不受支持的 浏览器。
- 限制对站点功能的访问权限。
有关详细信息,请参阅 W3C 社区组草稿报告:User-Agent 客户端提示中的规范。
User-Agent 客户端提示 HTTPS 标头
当 Microsoft Edge 向服务器发送 HTTPS 请求时,它会 User-Agent 客户端提示标头发送一组低 entropy。 有关详细信息,请参阅 低 entropy 提示表。 如果服务器需要有关浏览器的更精细信息,则其响应包括标头 Accept-CH
。 该响应标头的值是一个逗号分隔的列表,其中包含服务器需要从浏览器中获取的所有客户端提示请求标头,例如 Accept-CH: Sec-CH-UA-Full-Version,Sec-CH-UA-Platform-Version
。 下一个向服务器发送的 Microsoft Edge HTTPS 请求将包含指定的 User-Agent 客户端提示标头。
默认情况下,Microsoft Edge 按以下格式发送 Sec-CH-UA
、 Sec-CH-UA-Mobile
和 Sec-CH-UA-Platform
请求标头。
Sec-CH-UA: "Chromium";v="92", "Microsoft Edge";v="92", "Placeholder;Browser Brand";v="99"
Sec-CH-UA-Mobile: ?0
Sec-CH-UA-Platform: "Windows"
下表显示了具有示例值的所有可用提示请求标头。
User-Agent 请求标头 | 响应值示例 User-Agent |
---|---|
Sec-CH-UA |
"Not_A Brand";v="8", "Chromium";v="120", "Microsoft Edge";v="120" |
Sec-CH-UA-Mobile |
?0 |
Sec-CH-UA-Full-Version |
120.0.2210.91 |
Sec-CH-UA-Platform |
Windows |
Sec-CH-UA-Platform-Version |
15.0.0 |
Sec-CH-UA-Arch |
x86 |
Sec-CH-UA-Bitness |
64 |
Sec-CH-UA-Model |
Surface Pro |
User-Agent 客户端提示仅通过 HTTPS
使用 的安全连接发送。
User-Agent 客户端提示 JavaScript API
可以使用客户端上的 JavaScript 访问 User-Agent 客户端提示。 调用默认 navigator.userAgentData
的 时,它将返回以下响应。
{
"brands": [
{
"brand": "Not_A Brand",
"version":"8"
},
{
"brand": "Chromium",
"version":"120"
},
{
"brand": "Microsoft Edge",
"version":"120"
}
],
"mobile": false,
"platform": "Windows"
}
若要发送请求以获取更详细的信息,例如 platform
,请使用以下代码:
navigator.userAgentData.getHighEntropyValues([
"architecture",
"platform",
"platformVersion",
"uaFullVersion"
]).then(ua => {
console.log(ua)
});
响应采用以下格式:
{
"architecture": "x86",
"brands": [
{
"brand": "Not_A Brand",
"version": "8"
},
{
"brand": "Chromium",
"version": "120"
},
{
"brand": "Microsoft Edge",
"version": "120"
}
],
"mobile": false,
"platform": "Windows",
"platformVersion": "15.0.0",
"uaFullVersion": "120.0.2210.91"
}
有关详细信息,请参阅 MDN 上的 NavigatorUAData: getHighEntropyValues () 方法 。
platformVersion 提示
标头中的User-Agent
操作系统版本令牌尚未更新Windows 11,但仍报告 Windows NT 10.0
。
若要区分Windows 10和Windows 11,请在 platformVersion
Microsoft Edge 中请求客户端提示。 和 包含 1.0.0
和 12.0.0
之间的值表示Windows 10版本,而 或更高版本的值14.0.0
表示Windows 11的版本。
将 User-Agent 客户端提示与功能检测相结合
将 User-Agent 客户端提示与 功能检测 相结合是交付兼容的 Web 内容的有效方法。 Microsoft 建议使用此模式来:
- 提高代码可维护性。
- 减少代码脆弱性。
- 减少更改 User-Agent 字符串导致代码中断。
如果需要为类似 Chrome 的浏览器检查,Microsoft 建议检测 Chromium
,后者是支持 Microsoft Edge 的引擎。
使用此方法验证品牌,Chromium
并将检测应用于所有受影响的基于 Chromium 的浏览器:
function isChromium() {
for (brand_version_pair of navigator.userAgentData.brands) {
if (brand_version_pair.brand == "Chromium"){
return true;
}
}
return false;
}
使用上述方法可避免在特定索引处对品牌进行硬编码检查。 品牌名称的显示顺序可能会随时间而变化。
如果无法使用功能检测,请不要使用基于Chromium的已知浏览器的硬编码列表进行验证。 硬编码浏览器名称的示例包括 Microsoft Edge
和 Google Chrome
。 功能检测可能不可用,因为必须避免修复更高版本中Chromium bug,并且受影响的浏览器难以检测到。
User-Agent 字符串
User-Agent 字符串已过时,并且存在导致网站兼容性问题的悠久历史。
Microsoft 建议尽可能基于 User-Agent 字符串最大程度地减少使用 Microsoft Edge 浏览器检测逻辑。 如果有充分的理由检测浏览器,Microsoft Edge 团队建议使用 用户代理客户端提示 作为主要检测逻辑。 用户代理客户端提示 还降低了浏览器检测代码的复杂性。
对于旧式参考,以下信息包含在 User-Agent 字符串中。
在 Windows 上 User-Agent
,HTTP 请求标头包括:
Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/120.0.0.0
Safari/537.36
Edg/120.0.0.0
在 Android 上 User-Agent
,HTTP 请求标头包括:
Mozilla/5.0 (Linux; Android 10; K)
AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/120.0.0.0
Mobile Safari/537.36
EdgA/120.0.0.0
方法的 navigator.userAgent
响应值使用以下格式:
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0"
平台标识符会根据操作系统而更改,版本号随时间推移而递增。 格式与Chromium用户代理相同,并在末尾添加新Edg
令牌。 Microsoft 选择 Edg
令牌以避免字符串导致的 Edge
兼容性问题,字符串以前用于基于 EdgeHTML 的旧版 Microsoft Edge 浏览器。 该 Edg
令牌还与用于 iOS 和 Android 的现有令牌 一致。
各种平台上的 Microsoft Edge 标识符
在桌面操作系统上,Microsoft Edge 通常由 Edg
User-Agent 字符串中的令牌标识。 但是,某些设备平台上使用不同的 Microsoft Edge 令牌,如下所示:
平台 | 标识符令牌 |
---|---|
桌面 (Windows/Mac/Linux) | Edg |
iPhone/iPad | EdgiOS |
Android (Mobile/tablet) | EdgA |
不再支持Microsoft Edge 旧版。 有关详细信息,请参阅Microsoft Edge 旧版部分。
将 User-Agent 字符串映射到展开的浏览器名称
将 User-Agent 字符串标记映射到可在代码中使用的用户可读浏览器名称。 这种做法在 Web 上很常见。 将Edg
令牌映射到浏览器名称时,Microsoft 建议使用与用于旧版 Microsoft EdgeHTML 浏览器的名称不同的名称,以避免意外应用不适用于基于Chromium的浏览器的旧解决方法。
User-Agent 替代
有时,网站无法识别 Microsoft Edge 用户代理。 因此,网站的一组功能可能无法正常工作。 当 Microsoft 收到有关问题类型的通知时,Microsoft 会 (网站所有者) 联系你,并通知你更新的用户代理。
可能需要更多时间来更新和测试网站的用户代理检测逻辑,以解决 Microsoft 报告的问题。 为了最大程度地提高用户的兼容性,Microsoft Edge Beta和稳定通道使用用户代理替代列表。 更新网站时使用用户代理替代。 用户代理替代列表由 Microsoft 提供。
替代指定 Microsoft Edge 发送的新用户代理值,而不是特定网站的默认用户代理。 显示当前应用的用户代理替代列表:
打开Microsoft Edge Beta或稳定通道。
转到
edge://compat/useragent
。
Microsoft Edge Canary 和 Dev 通道当前不接收用户代理替代。 Microsoft Edge Canary 和 Dev 通道提供使用默认 Microsoft Edge 用户代理的环境。 使用 Microsoft Edge Canary 和 Dev 通道重现由默认 Microsoft Edge 用户代理引起的网站上的问题。
若要关闭Microsoft Edge Beta或稳定通道中的用户代理替代,请执行以下操作:
打开命令提示符。 例如,在 Windows 搜索文本框中输入 cmd ,然后选择 “命令提示符” 应用。
复制以下代码:
--disable-domain-action-user-agent-override
使用复制的代码运行 Microsoft Edge 应用,如下所示:
{path/to/microsoft/edge.ext} --disable-domain-action-user-agent-override
Microsoft Edge Legacy
旧版浏览器注意事项:
不再支持Microsoft Edge 旧版浏览器。 请参阅博客文章 New Microsoft Edge to replace Microsoft Edge 旧版。
Microsoft Edge 旧版仅在 Windows 10 上可用。
在本文介绍的所有 User-Agent 机制中,Microsoft Edge 旧版唯一支持的特定于浏览器的机制是 User-Agent 字符串。
Microsoft Edge 旧版 的 User-Agent 字符串包括
Edge
令牌。Microsoft Edge 旧版 User-Agent字符串的完整格式示例:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.19582