Microsoft Edge, Google Chromium, Google Chrome 版本号格式是 MAJOR.MINOR.BUILD.PATCH,随着版本升级,version numbers MAJOR.MINOR.BUILD.PATCH 中的 MINOR.BUILD.PATCH 变成了 0.0.0,navigator.userAgent Javascript API 和 User-Agent HTTP header 都会将 MINOR BUILD PATCH 部分全部变成0,实际上只能知道 MAJOR 部分。要想得到真实的完整 MAJOR.MINOR.BUILD.PATCH 版本号,需要更新代码,使用新的 Javascript API.
比如 Google Chrome 102.0.5005.115 的 User Agent string 是 Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36,从 User Agent string 只能看出是 Google Chrome 102。
Google Chromium 及其派生产品 Google Chrome, Microsoft Edge 使用 User-Agent Client Hints API 可以查看浏览器信息。
- navigator.userAgentData.brands
复制代码 以上 navigator.userAgentData.brands 可以查看当前浏览器的品牌,通常会有三个品牌。
Not A;Brand -- 99
Chromium -- 102
Google Chrome -- 102 <Google Chrome>
Microsoft Edge -- 102 <Microsoft Edge>
不过这样得到的版本号还是只有 MAJOR version,要想得到完整的版本号,就需要使用 navigator.userAgentData.getHighEntropyValues() 方法了。代码如下。
- <script>
- /**
- * get full version numbers for Google Chrome and Microsoft Edge
- * @author wuxiancheng.cn
- */
- navigator.userAgentData.getHighEntropyValues(['fullVersionList']).then(function(UserAgentDetails){
- let version = '0.0.0.0';
- let isChrome = isEdge = false;
- for(let i=0, l=UserAgentDetails.fullVersionList.length; i<l; i++){
- if('Microsoft Edge' === UserAgentDetails.fullVersionList[i].brand){
- isEdge = true;
- version = UserAgentDetails.fullVersionList[i].version;
- break;
- }else if('Google Chrome' === UserAgentDetails.fullVersionList[i].brand){
- isChrome = true;
- version = UserAgentDetails.fullVersionList[i].version;
- break;
- }
- }
- console.log(isChrome, isEdge, version);
- });
- </script>
复制代码 将 navigator.userAgentData.getHighEntropyValues 参数中的 fullVersionList 改为 uaFullVersion 在以上代码中可以直接使用 UserAgentDetails.uaFullVersion 获取 full version numbers,不过官方已经不建议这样做,后续版本可能失效,甚至抛出错误。
navigator.userAgentData.getHighEntropyValues() 只在 Google Chromium 90+ 及以 Google Chromium 为内核的其他浏览器(Google Chrome. Microsoft Edge etc)中才能使用,在 Firefox 中无法使用,在使用前需要先检测浏览器支持,否则浏览器会抛出错误。 |
|