原生方法检测

网站获取用户的浏览器和操作系统版本是一个很常见的需求,但是细说起来这个功能的实现并不简单。一般情况下有两种思路。

一是利用用户代理UserAgent来判断浏览器和OS的版本,因为各个平台和浏览器的UA都不一样。但是这种方法存在一个局限性,由于各方面的原因,浏览器的UA并不是一个简单的字符串,而是包含了各种信息的复杂字符串,而且由于UA可以被客户端修改,因此这种检测方法并不完全准确。以下是我的UA,大家可以猜猜我的浏览器和操作系统各是什么版本的。

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36

二就是通过各个浏览器之间实现的不同来判断。比如说只有IE浏览器支持ActiveX控件,因此通过在JavaScript代码中查看浏览器是否存在ActiveX控件属性即可判断该浏览器是否是IE浏览器。这种方法的优点是检测准确,而且相比检测UA来说速度更快。但是由于这种方法以来浏览器的具体实现,因此一旦浏览器升级换代,检测方法可能就失效了。

使用platform库

platform是一个检测浏览器和操作系统版本的JavaScript库。这里是它的Github地址:https://github.com/bestiejs/platform.js 。将它添加到自己的项目中也非常容易,下载项目中的platform.js文件然后添加到自己的项目中,然后在html文件中添加<script src="platform.js"></script>即可。

我电脑是Windows10 64位操作系统,使用的是Chrome 50 64位浏览器。以下是platform.js在我浏览器上的运行结果。你也可以将platform.js导入到自己的网页中,然后在F12开发者模式中在控制台中查看结果。

platform

返回一个浏览器平台对象,包含以下的各种属性

Object {description: "Chrome 50.0.2661.102 on Windows NT 10.0 64-bit", layout: "Blink", manufacturer: null, name: "Chrome", prerelease: null…}
description:"Chrome 50.0.2661.102 on Windows NT 10.0 64-bit"
layout:"Blink"
manufacturer:null
name:"Chrome"
os:Object
parse:parse(ua)
prerelease:null
product:null
toString:toStringPlatform()
ua:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36"
version:"50.0.2661.102"
proto:Object

platform.description

浏览器平台描述

Chrome 50.0.2661.102 on Windows NT 10.0 64-bit

platform.layout

浏览器布局引擎名称

Blink

platform.manufacturer

产品的制造商

null

platform.name

浏览器名称

Chrome

platform.parse([ua=navigator.userAgent])

这是一个方法,传入的参数是一个UA对象或者字符串,会返回该UA对应的platform对象。

platform.prerelease

浏览器预发布标志,可能为alpha或者beta。

null

platform.product

浏览器的产品名称

null

platform.toString()

如果可用的话就返回platform.description,否则就返回null

platform.ua

返回用户代理

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36

platform.version

返回浏览器的版本

50.0.2661.102

platform.os

返回一个操作系统对象,包含操作系统的各个属性

platform.os.architecture

操作系统的体系结果,32还是64

64

platform.os.family

操作系统家族

Windows NT

platform.os.toString()

返回操作系统字符串

Windows NT 10.0 64-bit

platform.os.version

操作系统版本

10.0

利用platform库获取浏览器和操作系统版本相关推荐

  1. JS获取浏览器类型和版本信息

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. python读取pdf文档书签 bookmark_Python利用PyPDF2库获取PDF文件总页码实例

    Python中可以利用PyPDF2库来获取该pdf文件的总页码,可以根据下面的方法一步步进行下去: 1.首先,要安装PyPDF2库,利用以下命令即可: pip install PyPDF2 2.接着, ...

  3. python读取扫描形成的pdf_Python利用PyPDF2库获取PDF文件总页码实例

    Python中可以利用PyPDF2库来获取该pdf文件的总页码,可以根据下面的方法一步步进行下去: 1.首先,要安装PyPDF2库,利用以下命令即可: pip install PyPDF2 2.接着, ...

  4. js和java获取浏览器内核和版本

    1. Java获取浏览器版本 String agent=request.getHeader("User-Agent").toLowerCase(); System.out.prin ...

  5. .NET 获取客户端的操作系统版本、浏览器版本和IP地址

    我们在使用.NET做网站的时候,很多情况下需要需要知道客户端的操作系统版本和浏览器版本,怎样获取客户端的操作系统和浏览器版本呢?我们可以通过分析UserAgent来获取. .NET 获取客户端的操作系 ...

  6. Python利用PyPDF2库获取PDF文件总页码

    Python中可以利用PyPDF2库来获取该pdf文件的总页码,可以根据下面的方法一步步进行下去: 1.首先,要安装PyPDF2库,利用以下命令即可: pip install PyPDF2 2.接着, ...

  7. H5 获取浏览器内核及版本

    主要代码 /*** 获取浏览器信息* @returns {{ name:"Edge"|"Edge(Chromium)"|"Internet Explo ...

  8. C# 获取并判断操作系统版本,解决Win10、 Windows Server 2012 R2 读取失败的方案

    Windows 8.1, Win10之后,通过GetVersion and GetVersionEx 方法获取WIndows操作系统版本号的功能需要添加manifest文件后才能查找到,不然的话会查找 ...

  9. redisCommand接口的用法--利用hiredis库获取MGET命令的结果的坑!

    工作中遇到如下业务场景: 我需要利用大批量的key去借助MGET命令来获取redis服务器上的记录,但是我却始终获取不到.当然我可以使用GET去一条一条地获取,但是这样一来,效率不高.所以最好的方式是 ...

最新文章

  1. CORD重构边缘DC 开源社区推动多项研究将落地
  2. Centos7常用命令[文件和目录]
  3. 在Win7的IIS上搭建FTP服务及用户授权
  4. 【内网穿透】生壳SSH映射 for Linux 使用教程
  5. 题目1191:矩阵最大值
  6. SQL基础整理——例题
  7. 有向无环图拓扑排序(python实现)
  8. 优秀技术人才需具备能力
  9. 【翻译】Go 1.1 交叉编译
  10. SAP License:做系统要关注业务过程
  11. STC51几种简单的延时函数
  12. java基础教程 吴仁群 试读_清华大学出版社-图书详情-《Java基础教程》
  13. bochs运行xp_bochs xp镜像下载
  14. mui实现分享功能_Hbuilder 云端打包app微信分享功能源码示例
  15. coldfusion_为ColdFusion辩护
  16. 认识常见壳与程序的特征
  17. 用计算机处理表格说课稿,《制作表格》说课稿
  18. 微信自定义菜单和个性化菜单添加emoji表情(兼容ios和安卓,防止小方框)
  19. 数据的写出(FileWriter)
  20. 浅析Windows2000服务与后门技术

热门文章

  1. python安全攻防---scapy基础---计算机网络各层协议
  2. 开启一个新的命令行窗口
  3. java静态类和非静态类的区别_Java中静态内部类和非静态内部类到底有什么区别?...
  4. 用结构体写一个简单的通讯录
  5. 用c++模拟实现一个学生成绩管理系统
  6. 使用openssl的md5库
  7. Linux网络编程服务器模型选择之并发服务器(下)
  8. 1061 判断题 (15 分)
  9. 函数wait、waitpid、孤儿进程、僵尸进程
  10. 从青铜到王者的路线,java不同系统间数据同步