说明
web端通常都是通过检测https请求头里面的User-Agent 字段来识别访问的客户端信息。
但是从windwos 11开始有了改变。单纯的比较User-Agent 的值将无法区分来自windows11还是来自windows 10。需要通过 sec-CH-UA-Platform-Version 进行比较了。
官网介绍:使用Windows 11客户端User-Agent检测客户端提示 - Microsoft Edge Development | Microsoft Docs
上面详细介绍了如何配置。我下面根据自己的理解,进行归纳官网的介绍。
版本
从Microsoft Edge 94xx 和Chrome 95xx 版本开始,浏览器在访问的时候可以通过UA-CH区分
来自于window10 还是window 11。
Sec-CH-UA-Platform-Version
: 1.0.0
到10.0.0
为window 10 。 13.0.0
及以上为windwos 11。
所以,想要知道客户端请求是否来自windows11 不只是系统的问题,还得根据客户的浏览器进行区分。
因为有些浏览器的适配没有做好。它不传UA-CH 那你也没办法。
JS 方法
针对检测是否来自windows 11。官网提供了一个js字段
代码语言:javascript复制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");
}
});
如果是要比对详细版本,可以通过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 |
Win11 | 13 |
其他
官网介绍的这些,我有点纳闷。因为我通过抓取浏览器的访问数据请求头。看到的并不是上面介绍的情况。
也不知道是否我理解错误了。
我将信息列出来,仅供大家一个参考吧。毕竟我也是刚升级window11.可能之后的版本中就不会存在问题了。
Microsoft Edge :96.0.1054.29 版本
通过Fiddler 抓取到的请求头信息:
可以看到Sec-ch-ua 但是没有platformVersion字段。也不知道是我的问题,还是Fiddler抓包不能显示的问题。 如果你尝试通过js获取系统版本现在已经需要考虑到windows 11了。毕竟也有不少的系统升级到windows11了。