十三、客户端检测

一、能力检测

测试浏览器是否支持某种特性。不要求事先知道浏览器信息,只需要检测自己关心的能力是否在

首先检测最常用的方式;(如,先检测document.getElementById,然后检测document.all)

其次必须检测切实需要的特性(不能通过检测document.all是否存在判断window.innerHeight是否存在)

安全能力检测:

检测某个特性是否存在的同时,验证其是否具有预期的能力

尽量使用typeof,但不够(DOM对象是宿主对象,IE8及以下版本中,由COM实现)

基于能力检测进行浏览器分析

使用能力检测而非用户代理检测的优点在于,伪造用户代理字符串狠简单,而伪造能够欺骗检测能力的浏览器特性很难

1.检测特性

如果需要使用特定浏览器能力,最好集中监测所有能力,而非使用时重复检测

2.检测浏览器

根据对浏览器特性的检测和已知特性对比,确定浏览器类型

3.能力检测的局限

通过检测一种或者一组能力,并不能总确定浏览器类型

最适合用于决定下一步操作,不一定能作为浏览器标识

二、用户代理检测

用户代理字符串

包含在HTTP请求的头部

在JavaScript中,用window.navigator.userAgent访问

服务器端,常见的做法是根据收到的用户代理字符串请求,确定何种操作

客户端,userAgent不可靠,因为可以伪造


标记/版本

1.用户代理历史

早期浏览器                                                 mozilla/version [language] (platform;Encryption)

Netscape Navigator 3 and IE3                  Mozilla/Version (platform ; Encryption [; OS-or-CPU description])

Netscape Navigator 4 and IE4-8

….

2.浏览器分析

伪造用户代理

分析浏览器

三、软件检测与硬件检测

1.识别浏览器与操作系统

Navigator.oscpu        操作系统、系统架构相关信息

Navigator.vendor      浏览器开发商

Navigator.platform   操作系统

Screen.colorDepth             screen.pixelDepth          显示器每像素颜色的位深

Screen.orientation     一个ScreenOrientation对象

2.浏览器元数据

navigator暴露出的一些api

Geolocation API    当前设备的地理位置  getCurrentPosition()

Connection State

浏览器跟踪网络连接状态并通过连接事件或者navigator.onLine属性暴露连接状态;设备联网或者断网时,会在window对象上触发online或者offline事件

NetworkInformation API

提供一些只读属性,并为连接属性变化事件处理程序定义了一个事件对象

Battery Status API

设备电池及充电情况,getBattery()方法返回一个期约实例,解决为一个BatteryManager对象

3.硬件

hardwareConcurrency   逻辑处理器核心数量

deviceMemory 系统内存大小

maxTouchPoints 最大关联触点数

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乘风xs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值