最近给主题评论区加UA判断,判断评论者是什么操作系统,博客程序本身就存了评论者的User-Agent
,只要针对User-Agent
进行判断系统就行了。
思路
实际操作时发现windows10
和windows11
的User-Agent
没有任何区别,经过一番查询看到了《使用用户代理客户端提示检测 Windows 11》这篇文章,大致的意思就是Windows11
不在支持通过User-Agent
检查客户端系统版本了,而是采用新的方式。
里面给了个js
判断的方法,此方法部分浏览器还不支持,Microsoft Edge 94
及以上,Chrome 95
及以上,Opera
支持,Firefox
,Internet Explorer 11
以及一众国产浏览器不支持。(国产浏览器都是基于比较老版本的chrome内核,很久都没跟进内核了)
于是乎我就想到了个中转方法,就是用js
判断,然后存个cookie
,然后php
判断这个cookie
,如果是windows11
,就自动将用户的User-Agent
里面windows10
的参数改成windows11
。这样就自己创造好了win10
和win11
的区别。
相关代码
JS代码
if(navigator.userAgentData){//判断当前环境是否支持
navigator.userAgentData.getHighEntropyValues(["platformVersion"])
.then(ua => {
if (navigator.userAgentData.platform === "Windows") {//判断是否是Windows系统
const majorPlatformVersion = parseInt(ua.platformVersion.split('.')[0]);
if (majorPlatformVersion >= 13) {//判断是否是win11或以上
document.cookie = "win11=true;path=/";//写入cookie
}
}
});}
部分PHP代码
$getAgent=$archive->request->getAgent();//获取默认的ua信息,$archive->request->getAgent()为typecho程序的,其他程序需要手动改成相应的变量。
if(isset($_COOKIE['win11'])){//判断cookie
$getAgent=str_replace("Windows NT 10.0","Windows NT 11.0",$archive->request->getAgent());//将win10的参数改成win11
}
//最后将$getAgent这个新变量重新递交给程序写入数据库
问题
在经过两个站点的测试发现,navigator.userAgentData
这玩意只对https的站点有效,也就是说除了对用户浏览器的要求外,还要求站长使用https
才满足判断条件,尴尬早知道这么坑就不写了。

版权属于:泽泽社长
本文链接:https://blog.zezeshe.com/archives/bad-code-if-windows11.html
本站未注明转载的文章均为原创,并采用
CC BY-NC-SA 4.0 授权协议,转载请注明来源,谢谢!
edge识别不出win11
EDGE的版本感觉不对
具体哪里不对呀,我感觉没毛病呀
过来研究下
看了几篇文章 还是这个比较详细
是不是发现挺鸡肋的
苹果那边更坑,从 macOS Monterey 开始,UA 也都停留在了 Mac OS X 10_15_X 版本,直接回到了两个大版本前,ε=(´ο`*)))唉
没啥人遵守的宽泛标准
api就不行了
是呀,我觉得这操作挺无语的
牛逼啊,这
比较遗憾的是火狐不支持,还有一众国产浏览器好像都不咋跟进chrome了
每次来泽泽社都能get到东西哈哈哈
没啥卵用的小知识点
首页布局怎么改了,卡片样式有点格格不入的感觉
我的是win11家庭版21h2,没识别出来
注意看文章,火狐浏览器不支持
,首页是新增的博客布局风格,因为我博客内容转型了,现在就是生活博客了所以之前的布局驾驭不了了
折腾完才发现坑,不过既然做了就用了