从你的网站上检测Microsoft Edge 2021-10-30 默认分类 暂无评论 2661 次阅读 ![5dbe448db15ec04fb7117f62_1024.jpg][1] 浏览器为网站提供了检测浏览器信息的机制,如品牌、版本号和主机操作系统。传统的User-Agent字符串已经过时,并有导致网站兼容性问题的历史。新的User-Agent客户端提示是一种改进的机制,用于检索浏览器信息。 你可能想根据用户的浏览器为他们提供不同的体验。例如,如果你包括如何配置Microsoft Edge或其他浏览器以用于你的网站的步骤,你可能想检测浏览器,然后显示适当的内容。 浏览器检测的机制: Mechanism Server-side Client-side **User-Agent Client Hints** (recommended) Sec-CH-UA HTTPS header navigator.userAgentData JavaScript method **User-Agent string** (legacy) User-Agent HTTPS header navigator.userAgent JavaScript method 本文介绍了Microsoft Edge支持的检索用户代理信息的方法。 特征检测 ---- 微软建议尽可能地检测浏览器是否支持某个功能,而不是检测浏览器。 如果你必须检测浏览器,微软建议使用客户端提示,如下。 用户代理客户端提示 --------- Microsoft Edge从90版本开始支持User-Agent Client Hints。 用户代理客户端提示是一种更干净、更保护隐私的方式来访问浏览器信息,如浏览器名称、版本号、平台,以及更多。很快,User-Agent字符串将被冻结,并被各种浏览器所淘汰。例如,Chrome平台状态网站描述了特征中的变化。减少User-Agent字符串信息。 当你想使用用户代理客户端提示时,请使用用户代理客户端提示。 - 判断新的浏览器活动是否来自预期的用户。 - 如果用户是这个网站的新用户,可以定制提示或说明。 不要使用用户代理客户端提示来: - 阻止不支持的浏览器。 - 限制对你网站上的功能的访问。 欲了解更多信息,请浏览[W3C社区草案报告|用户代理客户端提示的规范。][2] 用户代理客户端提示 HTTPS头 ---------------- 当Microsoft Edge向服务器发送HTTPS请求时,它会发送一组低熵的User-Agent Client Hints头。欲了解更多信息,请浏览低熵提示表。如果服务器需要关于浏览器的更细化的信息,其响应包括一个Accept-CH头。该响应头的值是一个逗号分隔的列表,包含了服务器希望从浏览器获得的所有客户端提示请求头,例如Accept-CH:Sec-CH-UA-Full-Version,Sec-CH-UA-Platform-Version。下一次Microsoft Edge向服务器发出的HTTPS请求将包括指定的User-Agent Client Hints头。 默认情况下,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" 下表显示了所有可用的提示请求头和示例值。 ser-Agent request headerExample User-Agent response value Sec-CH-UA"Chromium";v="91", "Microsoft Edge";v="91","GREASE";v="99" Sec-CH-UA-Mobile ?0 Sec-CH-UA-Full-Version91.0.866.0 Sec-CH-UA-PlatformWindows Sec-CH-UA-Platform-Version10.0 Sec-CH-UA-Archx86 Sec-CH-UA-Bitness64 Sec-CH-UA-ModelSurface Pro > 注意事项 > 用户代理客户端提示只通过使用HTTPS的安全连接发送。 用户代理客户端提示 JavaScript API ------------------------ 你可以在客户端使用JavaScript访问User-Agent客户端提示。当你调用默认的navigator.userAgentData时,它会返回以下响应。 { brands: [ {brand: "Chromium","version":"91"}, {brand: "Microsoft Edge","version":"91"}, {brand: "GREASE","version":"99"}, ] mobile: false } Microsoft Edge包括一个随时间变化的GREASE品牌值。它可以防止网站在试图检测Microsoft Edge的版本时匹配整个品牌列表。 要请求更详细的信息,如平台,请使用以下代码。 下面的代码片段发送了一个请求。 navigator.userAgentData.getHighEntropyValues( ["architecture", "model", "platform", "platformVersion", "uaFullVersion"]) .then(ua => { console.log(ua) }); 收到以下返回。 {architecture: "x86", model: "", platform: "Windows", platformVersion: "10.0", uaFullVersion: "92.0.866.0"} 欲了解更多信息,[请浏览getHighEntropyValues()。][3] platformVersion 提示 ------------------ User-Agent头中的操作系统版本标记还没有为Windows 11更新,仍然报告Windows NT 10.0。 为了区分Windows 10和Windows 11,请在Microsoft Edge 95或更高版本中请求platformVersion客户端提示。介于1.0.0和12.0.0之间的值代表Windows 10的版本,而14.0.0或以后的值代表Windows 11的版本。 用户代理客户端提示建议使用 将User-Agent客户端提示与特征检测相结合是提供兼容网络内容的有效方法。微软建议使用这种模式来。 --------------------------------------------------- - 提高代码的可维护性。 - 减少代码的脆弱性。 - 减少因修改用户代理字符串而造成的代码中断。 如果你需要检查类似Chrome的浏览器,微软建议检测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的错误,而且受影响的浏览器难以检测。 用户代理字符串 ------- 用户代理字符串已经过时,并且在造成网站兼容性问题方面有很长的历史。 在可能的情况下,微软建议尽量减少使用基于用户代理字符串的Microsoft Edge浏览器检测逻辑。如果你有充分的理由检测浏览器,Microsoft Edge团队建议使用User-Agent Client Hints作为主要检测逻辑。User-Agent Client Hints还可以减少浏览器检测代码的复杂性。 对于传统的参考,User-Agent字符串使用了以下格式。 在Windows上,User-Agent HTTP请求头使用以下格式。 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36 Edg/90.0.818.46 在Android上,User-Agent HTTP请求头使用以下格式。 User-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Mobile Safari/537.36 Edg/90.0.818.46 navigator.userAgent方法的响应值使用以下格式。 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4501.0 Safari/537.36 Edg/91.0.866.0" 平台标识符根据操作系统的不同而变化,版本号随着时间的推移而增加。其格式与Chromium用户代理相同,只是在末尾增加了一个新的Edg标记。微软选择Edg令牌是为了避免Edge字符串引起的兼容性问题,Edg字符串以前是用于基于EdgeHTML的传统微软Edge浏览器。Edg令牌也与现有的用于iOS和Android的令牌一致。 将User-Agent字符串映射为浏览器名称 ---------------------- 将用户代理字符串令牌映射为人类可读的浏览器名称,以便在代码中使用。这种做法在整个网络中很常见。当你将新的Edg令牌映射到浏览器名称时,微软建议使用一个不同于用于传统的微软EdgeHTML浏览器的名称,以避免意外地应用不适用于基于Chromium的浏览器的传统工作方法。 用户代理重写 ------ 有时,一个网站不能识别Microsoft Edge的用户代理。因此,网站的一系列功能可能无法正常工作。当微软被告知这类问题时,微软会联系你(网站所有者)并通知你更新用户代理。 你可能需要更多时间来更新和测试你网站的用户代理检测逻辑,以解决微软报告的问题。为了最大限度地提高你的用户的兼容性,微软Edge测试版和稳定版频道使用了一个用户代理覆盖列表。在你更新你的网站时,使用用户代理覆盖物。用户代理覆盖列表是由微软提供的。 这些覆盖规定了新的用户代理值,Microsoft Edge为特定的网站发送这些值,而不是默认的用户代理。要显示当前应用的用户代理覆盖的列表,请完成以下操作。 1. 打开Microsoft Edge Beta或Stable频道。 2. 导航到 edge://compat/useragent。 Microsoft Edge Canary和Dev通道目前没有收到用户代理覆盖。Microsoft Edge Canary和Dev通道提供了使用默认Microsoft Edge用户代理的环境。使用Microsoft Edge Canary和Dev通道来重现由默认Microsoft Edge用户代理引起的网站问题。要关闭Microsoft Edge Beta或Stable通道中的用户代理覆盖,请完成以下操作。 1. 打开一个命令提示符。例如,在Windows搜索文本框中输入cmd,选择命令提示符应用程序。 2. 复制以下代码片段。 --disable-domain-action-user-agent-override 3. 使用代码片段运行Microsoft Edge应用程序。 {path/to/microsoft/edge.ext} --disable-domain-action-user-agent-override [1]: http://guobacai.com/usr/uploads/2021/10/1116889540.jpg [2]: https://wicg.github.io/ua-client-hints/ [3]: https://wicg.github.io/ua-client-hints#getHighEntropyValues 标签: Chrome, Edge, 浏览器
评论已关闭