侧边栏壁纸
  • 累计撰写 73 篇文章
  • 累计收到 3,478 条评论
  • 今日撰写 0 篇文章
    今日已经过去 16 小时
    69%
    这周已经过去 1
    14%
    本月已经过去 22
    70%
    今年已经过去 8 个月
    66%
[技术分享]通过JS判断Windows11
2022年08月11日978阅读15评论10点赞
苏晓晴
发布时间:2022年08月11日 / 15 / 978

文章前言

最近在优化博客 顺带写了个显示 User-Agent 信息的插件
由于更新了Windows11系统之后 系统内核不更改 一直都是 Windows10 内核
这件事折磨了我好久 但我在 泽泽社长微软官方文档 看到了解决办法 以下是来自微软官方文档的说明

User-Agent字符串不会更新为区分Windows 11和Windows 10,也不会区分 CPU 体系结构。 建议不要使用User-Agent字符串来检索用户代理数据。 不支持User-Agent客户端提示的浏览器将无法区分Windows 11和Windows 10,也无法区分 CPU 体系结构。

使用User-Agent客户端提示检测Windows 11

在 Microsoft Edge (和 Google Chrome) 中,网站可以通过User-Agent客户端提示 (UA-CH) 来区分Windows 11用户和Windows 10用户。 可以在以下 UA-CH 请求标头中找到此信息:

标头字段指示Windows 10的值指示Windows 11的值
Sec-CH-UA-PlatformWindowsWindows
Sec-CH-UA-Platform-Version和 之间的 1.0.010.0.013.0.0 及更高版本

支持的浏览器

这里要注意的是 此项目 并不支持某些国产浏览器或者低于以下内核版本的

浏览器版本是否支持
Microsoft Edge 94+支持
Chrome 95+支持
Opera支持
Firefox不支持
Safari不支持

详情代码

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();
// 修改 User-Agent 的字符串
if(isset($_COOKIE['win11'])){
    $newAgent = str_replace('Windows NT 10.0', 'Windows NT 11.0', $getAgent);
}else{
    $newAgent = $getAgent;
}
// 保存修改后的 User-Agent 提交到评论数据库表
$db = Typecho_Db::get();
$db->query($db->update('comments')
     ->rows(array('agent' => $newAgent))
     ->where('coid = ?', $comment->coid));

文章结尾

以上代码均除了要满足用户浏览器要求 还要看站点是否为https协议
本篇文章到此结束~

10
打赏

海报

正在生成.....

♥评论♥(15)

使用cookie技术保留您的个人信息以便您下次快速评论,继续评论表示您已同意该条款
密语
取消
  1. 头像
    应用下载 (游客)
    中国重庆市移动
    Windows 10 / Google Chrome 109
    沙发

    感谢分享 学习了。

    Windows 10 / Google Chrome 109
    回复
  2. 头像
    稀神灵梦 (游客)
    中国广西桂林市联通
    Windows 11 / Google Chrome 122
    板凳

    不错

    Windows 11 / Google Chrome 122
    回复
  3. 头像
    Stilly (游客)
    中国云南省昆明市移动
    Windows 10 / Microsoft Edge 108
    地毯

    找到了,Sec-CH-UA-Platform在Windows10和11下都是Windows,而你用了||,即或,就是只要第一个条件满足或者第二个条件满足都会显示"是windows11",应该用“&&”,即且。

    Windows 10 / Microsoft Edge 108
    回复
    1. 头像
      苏晓晴 (UID: 1)
      中国广西贺州市移动
      博主
      Windows 11 / Microsoft Edge 108
      @ Stilly

      我已经不弄了 PHP取不出HTTP_SEC_CH_UA_PLATFORM_VERSION 只能取出HTTP_SEC_CH_UA_PLATFORM

      Windows 11 / Microsoft Edge 108
      回复
  4. 头像
    Stilly (游客)
    中国云南省昆明市移动
    Windows 10 / Microsoft Edge 108
    第4楼

    新版本Windows10貌似会被识别为Windows11

    Windows 10 / Microsoft Edge 108
    回复
  5. 头像
    闲潭梦花 (游客)
    中国浙江省杭州市余杭区移动
    华为Mate40 Pro / HarmonyOS / 华为浏览器 13
    第5楼

    看看识别UA效果表情

    HarmonyOS / 华为浏览器 13
    回复
  6. 头像
    Miya#1337 (游客)
    中国安徽省合肥市电信
    Windows 10 / Google Chrome 86
    第6楼

    好耶(☆ω☆)

    Windows 10 / Google Chrome 86
    回复
  7. 头像
    3431420436 (游客)
    中国甘肃省兰州市电信
    Windows 11 / Microsoft Edge 106
    第7楼

    厉害

    Windows 11 / Microsoft Edge 106
    回复
  8. 头像
    泽泽 (游客)
    中国浙江省衢州市移动
    Mac OS X 10.15.7 / Google Chrome 105
    第8楼

    点进来学习,没想到还失效了表情

    Mac OS X 10.15.7 / Google Chrome 105
    回复
    1. 头像
      苏晓晴 (UID: 1)
      中国广西贵港市移动
      博主
      Windows 11 / Microsoft Edge 105
      @ 泽泽

      我刚刚测试了一下 好像没失效表情

      Windows 11 / Microsoft Edge 105
      回复
      1. 头像
        泽泽 (游客)
        中国山东省青岛市移动
        Mac OS X 10.15.7 / Google Chrome 105
        @ 苏晓晴

        好耶表情

        Mac OS X 10.15.7 / Google Chrome 105
        回复
    2. 头像
      苏晓晴 (UID: 1)
      中国广西贵港市移动
      博主
      Windows 11 / Microsoft Edge 105
      @ 泽泽

      这就非常的尴尬表情

      Windows 11 / Microsoft Edge 105
      回复
  9. 头像
    Coisíní (游客)
    中国北京市移动
    iPhone设备 / iOS 15.6 / Safari 15
    第9楼

    图片评论

    iOS 15.6 / Safari 15
    回复
  10. 头像
    Faryun (游客)
    中国广东省东莞市鹏博士BGP
    Mac OS X 12.4 / Google Chrome 103
    第10楼

    举个爪

    Mac OS X 12.4 / Google Chrome 103
    回复