首页 > 其他分享 >js 浏览器分析

js 浏览器分析

时间:2024-02-04 22:00:47浏览次数:26  
标签:分析 浏览器 537.36 代理 用户 window userAgent js

想要知道自己代码运行在什么浏览器上,大部分开发者会分析 window.navigator.userAgent返回的字符串值。所有浏览器都会提供这个值,如果相信这些返回值并基于给定的一组浏览器检测这个 字符串,最终会得到关于浏览器和操作系统的比较精确的结果。 相比于能力检测,用户代理检测还是有一定优势的。能力检测可以保证脚本不必理会浏览器而正常执行。现代浏览器用户代理字符串的过去、现在和未来格式都是有章可循的,我们能够利用它们准确识别浏览器。 伪造用户代理 通过检测用户代理来识别浏览器并不是完美的方式,毕竟这个字符串是可以造假的。只不过实现window.navigator 对象的浏览器(即所有现代浏览器)都会提供 userAgent 这个只读属性。因此,简单地给这个属性设置其他值不会有效:

// Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) 
Chrome/65.0.3325.181 Safari/537.36 
window.navigator.userAgent = 'foobar'; 
console.log(window.navigator.userAgent); 
// Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) 
Chrome/65.0.3325.181 Safari/537.36

不过,通过简单的办法可以绕过这个限制。比如,有些浏览器提供伪私有的__defineGetter__方法,利用它可以篡改用户代理字符串:

// Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) 
Chrome/65.0.3325.181 Safari/537.36 
window.navigator.__defineGetter__('userAgent', () => 'foobar'); 
console.log(window.navigator.userAgent); 
// foobar

对付这种造假是一件吃力不讨好的事。检测用户代理是否以这种方式被篡改过是可能的,但总体来看还是一场猫捉老鼠的游戏。 与其劳心费力检测造假,不如更好地专注于浏览器识别。如果相信浏览器返回的用户代理字符串,那就可以用它来判断浏览器。如果怀疑脚本或浏览器可能篡改这个值,那最好还是使用能力检测。 分析浏览器 通过解析浏览器返回的用户代理字符串,可以极其准确地推断出下列相关的环境信息:  浏览器  浏览器版本  浏览器渲染引擎  设备类型(桌面/移动)  设备生产商  设备型号  操作系统  操作系统版本 当然,新浏览器、新操作系统和新硬件设备随时可能出现,其中很多可能有着类似但并不相同的用户代理字符串。因此,用户代理解析程序需要与时俱进,频繁更新,以免落伍。自己手写的解析程序如果不及时更新或修订,很容易就过时了。本书上一版写过一个用户代理解析程序,但这一版并不推荐读者自己从头再写一个。相反,这里推荐一些 GitHub 上维护比较频繁的第三方用户代理解析程序:

 UAParser.js 
 Platform.js 
 CURRENT-DEVICE 
 Google Closure 
 Mootools

标签:分析,浏览器,537.36,代理,用户,window,userAgent,js
From: https://blog.51cto.com/u_16237074/9594937

相关文章

  • JS——常用实例
    对话框输入,获取,计算,输出。<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>JS:操作HIML对象</title></head><body><!--1.两个输人框和一个输出框--><labelfor="1......
  • GeoJSON
    GeoJSON概览https://www.processon.com/mindmap/6224a2dc7d9c0836f90060a8地理要素特征对象->Feature{type:"Feature","properties":{name:'xxx'},"geometry":{{"type":"Point",......
  • 【可观测性系列】 OpenTelemetry Collector的部署模式分析
    ......
  • [经验] 怎么分析这段感情的变化情况
    1、怎么分析这段感情的变化感情是人与人之间最为复杂而又最为重要的纽带之一。无论是亲情、友情还是爱情,都会经历许多的波折和变化。对于感情的变化,我们需要用理性的眼光去解析,找到原因,寻求解决之道。分析感情的变化要从根本原因入手。有些感情破裂的原因是表面的,比如互相之间的误......
  • 《jsp篇》jsp是什么?
    前文链接:https://www.zhihu.com/question/437632592/answer/1677694755链接:https://www.zhihu.com/question/23984162/answer/689106407现在(2019)对于后端程序员来说,可以不学JSP。但是如果你是非科班,不论是在培训班还是自学,最好都了解一下。技术不扎实的培训班学员,基本很难找到一......
  • 《jsp篇》jsp中引用js路径的三种方法
    链接:https://blog.csdn.net/xukangone/article/details/102948708第一种直接引用这里的路劲为<scripttype="text/javascript"src="js/jquery-3.0.0.min.js"></script>注意:在jsp中使用js中的方式必须先对“jQuery-3.0.0.min.js”进行页面的引用,否则无效;因在js中使用$(docu......
  • 定制你的清爽Mac版Edge浏览器
    浏览器每次打开都有个烦人的提示要获取将来的microsoftedge更新,需要macos10.15或更高版本,找了很久也没有解决办法,有windows端的解决方案,有禁止更新的解决方案,就是没有Mac上如何避免这个告警的方案,于是走上Edge定制化之旅。省流直接下载下面的com.microsoft.Edge.......
  • Flog.js
      Emeditor用的格式化日志的脚本。主要用于从日期中提取行列数据。//功能:格式化runlog中各个线程的统计项//使用方法,输入所要提取统计项的一个关键词,或多个关键词对应值求和//正则无记忆方法varfso=newActiveXObject("Scripting.FileSystemObject");varstrSp......
  • Windows中通过NVM安装和切换各个NodeJS版本
    1、下载NVM下载地址:https://github.com/coreybutler/nvm-windows/releases如我们下载:https://github.com/coreybutler/nvm-windows/releases/download/1.1.12/nvm-setup.exe2、安装NVM在安装前,最好将已安装的NodeJS卸载掉,避免出现不必要的问题。选择NVM安装目录,如下所示:......
  • NVIDIA显卡驱动NVIDIA-Linux-x86_64-545.29.02 安装错误分析之一
    software/NVIDIA-Linux-x86_64-545.29.02/kernel-open/nvidia/libspdm_shash.c:在函数‘lkca_hmac_duplicate’中:/software/NVIDIA-Linux-x86_64-545.29.02/kernel-open/nvidia/libspdm_shash.c:90:26:错误:implicitdeclarationoffunction‘crypto_tfm_ctx_aligned’;didy......