从网站检测 Microsoft Edge
Microsoft Edge 使网站能够检索用户代理信息。 使用用户代理信息为每个用户的浏览器正确显示网页。 浏览器为网站提供了检测浏览器信息(如品牌、版本号和主机作系统)的机制。
用户代理客户端提示 是检索浏览器信息的最佳方式。 请参阅下面的 用户代理客户端提示。
用户代理字符串 是检索浏览器信息的旧方法。 它们已过时,并且有导致网站兼容性问题的历史。 请参阅下面的 用户代理字符串。
你可能希望根据用户的浏览器为用户提供不同的体验。 例如,如果包含有关如何配置 Microsoft Edge 或其他浏览器以用于站点的步骤,则可能需要检测浏览器,然后显示相应的内容。
浏览器检测机制:
机制 | 服务器端 | 客户端 |
---|---|---|
建议) (用户代理客户端提示 |
Sec-CH-UA HTTPS 标头 |
navigator.userAgentData JavaScript 方法 |
旧版) (用户代理字符串 |
User-Agent HTTPS 标头 |
navigator.userAgent JavaScript 方法 |
Microsoft建议尽可能检测浏览器中 是否支持某个功能 ,而不是检测浏览器。
如果必须检测浏览器,Microsoft建议将 User-Agent 客户端提示与 功能检测结合使用,如下所示。
Microsoft Edge 支持 User-Agent 客户端提示。
User-Agent 客户端提示是一种解决隐私问题的方法,同时允许网页检测浏览器信息,例如浏览器名称、版本号、平台等。 很快,User-Agent 字符串将被各种浏览器冻结和弃用。 例如,Chrome 平台状态网站介绍了 功能:减少用户代理字符串信息中的更改。
在想要 User-Agent:
- 确定新的浏览器活动是否来自预期用户。
- 如果用户不熟悉此网站,则自定义提示或说明。
请勿使用 User-Agent 客户端提示来:
- 阻止 不受支持的 浏览器。
- 限制对站点功能的访问权限。
有关详细信息,请参阅 W3C 社区组草稿报告:User-Agent 客户端提示中的规范。
当 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
使用 的安全连接发送。
可以使用客户端上的 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 () 方法 。
标头中的User-Agent
作系统版本令牌尚未更新Windows 11,但仍报告 Windows NT 10.0
。
若要区分Windows 10和Windows 11,请在 Microsoft Edge 中请求platformVersion
客户端提示。 和 包含 1.0.0
和 12.0.0
之间的值表示Windows 10版本,而 或更高版本的值14.0.0
表示Windows 11的版本。
将 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 字符串已过时,并且存在导致网站兼容性问题的悠久历史。
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 通常由 Edg
User-Agent 字符串中的令牌标识。 但是,在某些设备平台上,Microsoft Edge 使用不同的令牌,如下所示:
平台 | 标识符令牌 |
---|---|
桌面 (Windows/Mac/Linux) | Edg |
iPhone/iPad | EdgiOS |
Android (Mobile/tablet) | EdgA |
不再支持Microsoft Edge 旧版。 有关详细信息,请参阅Microsoft Edge 旧版部分。
将 User-Agent 字符串标记映射到可在代码中使用的用户可读浏览器名称。 这种做法在 Web 上很常见。 将Edg
令牌映射到浏览器名称时,Microsoft建议使用不同于旧版 Microsoft EdgeHTML 浏览器的名称,以避免意外应用不适用于基于 Chromium 的浏览器的旧解决方法。
有时,网站无法识别 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 旧版浏览器。 请参阅博客文章新建 Microsoft Edge 以替换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