toc

前言

用户代理检测通过浏览器的用户代理字符串确定使用的是什么浏览器。
JavaScript 中可以通过 navigator.userAgent 访问。

Vue2中用户代理检测

Vue2 源码中,有一段用户代理检测。

var inBrowser = typeof window !== 'undefined';
var inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;
var weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();
var UA = inBrowser && window.navigator.userAgent.toLowerCase();
var isIE = UA && /msie|trident/.test(UA);
var isIE9 = UA && UA.indexOf('msie 9.0') > 0;
var isEdge = UA && UA.indexOf('edge/') > 0;
var isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');
var isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios');
var isChrome = UA && /chrome\/\d+/.test(UA) && !isEdge;
var isPhantomJS = UA && /phantomjs/.test(UA);
var isFF = UA && UA.match(/firefox\/(\d+)/);

这段代码中,Vue2 不关心用户代理是否被篡改,选择相信浏览器返回的用户代理字符串,用来判断浏览器。因为 Vue2 的核心功能不在于 用户代理检测

篡改用户代理字符串

console.log(window.navigator.userAgent);
// Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36
window.navigator.__defineGetter__('userAgent', () => 'helloworld');
console.log(window.navigator.userAgent);
// helloworld

总结

  • 浏览器用户代理字符串可以被篡改。

【JavaScript】用户代理检测的局限性相关推荐

  1. javascript客户端检测技术

    1. Firefox  Gecko是firefox的呈现引擎.当初的Gecko是作为通用Mozilla浏览器一部分开发的,而第一个采用Gecko引擎的浏览器是Netscape6: 我们可以使用用户代理 ...

  2. BOM之navigator对象和用户代理检测

    前面的话 navigator对象现在已经成为识别客户端浏览器的事实标准,navigator对象是所有支持javascript的浏览器所共有的.本文将详细介绍navigator对象和用户代理检测 属性 ...

  3. 用户代理检测与浏览器Ua详细分析

    . 首页 博客园 联系我 前言:用户代理字符串与用户代理检测. 先看结论/可用代码. 浏览器市场份额现状. Mozilla Firefox. Microsoft Internet Explorer. ...

  4. JavaScript类型检测小结-http://bbs.51js.com/viewthread.php?tid=82661

    老话题了,各种方案和相关讨论都不少,简单总结下: 悠久的typeof JavaScript里只有五种基本数据类型:number, string, boolean, null, undefined. 其 ...

  5. 什么才是正确的javascript数组检测方式

    什么才是正确的javascript数组检测方式 前面的话 对于确定某个对象是不是数组,一直是数组的一个经典问题.本文专门将该问题择出来,介绍什么才是正确的javascript数组检测方式 typeof ...

  6. 如何在JavaScript中检测用户的首选配色方案

    by Oskar Hane 由Oskar Hane 如何在JavaScript中检测用户的首选配色方案 (How to detect a user's preferred color scheme i ...

  7. userAgent,JS用户代理检测——判断浏览器内核、浏览器、浏览器平台、windows操作系统版本、移动设备、游戏系统

    1.识别浏览器呈现引擎 为了不在全局作用域中添加多余变量,这里使用单例模式(什么是单例模式?)来封装检测脚本.检测脚本的基本代码如下所示: 1 var client = function() { 2 ...

  8. JavaScript数据类型检测总结

    2019独角兽企业重金招聘Python工程师标准>>> 在js中,有四种用于检测数据类型的方式,分别是: typeof 用来检测数据类型的运算符 instanceof 检测一个实例是 ...

  9. javascript漏洞-检测到目标站点存在javascript框架库漏洞

    一般是让升级为最新的版本的脚本文件,但是实际使用过程中,有的插件不兼容,盲目升级会导致网站部分插件不可用. 下面是一种解决方案. 比如漏洞扫描出jquery:2.1.4.作以下处理: 一.根据web应 ...

最新文章

  1. TCP网络那点破事!三次握手、四次挥手、TIME-WAIT、HTTP 2.0 ....
  2. Spring集成spymemcached
  3. Linux之wget下载
  4. 几道偏序问题(数据结构)
  5. 办公自动化-演练-统计日报的演练-0223
  6. ES6学习(模板字符串)
  7. React.js 官网入门教程 分离文件 操作无法正常显示HelloWord
  8. 通过PMP认证考试的心得分享
  9. SAS安装及过程中遇到的问题的解决办法
  10. 平安普惠java面试_【面经】平安普惠开发工程师面试
  11. [吐血推荐]超冷笑话集锦!
  12. 如何选择DDoS防御服务器
  13. 原生app签名如何转换成快应用签名
  14. IMAC 2011 MID免光驱安装WIN10
  15. Kryo 高性能序列化和反序列化
  16. 2022年数学建模国赛c题论文+代码(附详解)
  17. 机器学习简易入门-附推荐学习资料
  18. Runtime error: expected scalar type Float but found Double
  19. WIFI6:WLAN 组播转单播原理与测试
  20. 企业寄件分部门管理教程

热门文章

  1. 分享公众号抽奖的作用_微信公众号抽奖活动怎么弄
  2. RUNTIME / 微信公众号开发—主动向用户发送消息
  3. NextCloud的安装配置
  4. R语言画图——添加数学表达式和R2(Ⅱ)
  5. springboot启动提示文件不能找到问题解决
  6. 常用库函数的学习笔记
  7. OC版本的Moya插件网络架构
  8. 等保2.0.等保对象知多少
  9. 凯撒加密的python语言程序_Python的凯撒密码加密为啥要ord(a),然后又减去?...
  10. 10天精读掌握:计算机组成与设计(COAD:Patterson and Hennessy) (第4天 2018/10.29)