关于项目内浏览器限制问题(VUE)

2023-11-07

目的:限制项目在某些浏览器中打开

代码位置如图:

1、获取用户代理:navigator.userAgent;

拓展:

属性 输出值
navigator.appCodeName 浏览器代号: Mozilla
navigator.appName 浏览器名称: Netscape
navigator.appVersion 浏览器版本: 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36
navigator.cookieEnabled 启用Cookies: true
navigator.platform 硬件平台: Win32
navigator.userAgent 用户代理: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36
navigator.language 用户代理语言: zh-CN

2、通过获取的用户代理进行判断。

1)、关于版本问题

//判断chrome版本问题
function getChromeVersion() {
//通过获取回的值中空格进行分割
      var arr = userAgent.split(" ");
      var chromeVersion = "";
//通过循环及正则判断,获取当前chrome版本号
      for (var i = 0; i < arr.length; i++) {
        if (/chrome/i.test(arr[i]))  chromeVersion = arr[i];
      }
      if (chromeVersion)  return Number(chromeVersion.split("/")[1].split(".")[0]);
        else return false;
    }
//在80版本以上才可使用
    let _is__browser_Error = getChromeVersion() > 80;

2、关于edge、us、qq等浏览器限制。判断【Safari】后边是否有后缀字符串,或者【Chrome】和【Safari】之间有其他标识符。

例:

//判断相关浏览器代码(禁止所有)
let _is_shell = userAgent.substring(userAgent.indexOf("Safari") + 13).length > 5 || userAgent.indexOf("Safari/") - userAgent.indexOf("Chrome/") > 25;

由于项目内需求放开Edge,代码如下:

 function getIsEdge() {
      var edge = userAgent.split(" ");
      var isEdge = ''
      for (var i = 0; i < edge.length; i++) {
//判断相关字符
        if (/Edg/i.test(edge[i])) isEdge = edge[i];
      }
      if (isEdge) return false
      else return userAgent.substring(userAgent.indexOf("Safari") + 13).length > 5 ||
          userAgent.indexOf("Safari/") - userAgent.indexOf("Chrome/") > 25;
    }
    let _is_shell = getIsEdge();

3、关于极速浏览器的限制

// 检测极速内核下的360浏览器
    function checkChromeFor360() {
      var uas = navigator.userAgent.split(' '),
        result = false;
      // 排除ua自带标志的双核浏览器, 余下chrome,chromium及360浏览器
      if (uas[uas.length - 1].indexOf('Safari') == -1) {
        return result;
      }
      for (var key in navigator.plugins) {
        // np-mswmp.dll文件在chromium及chrome未查询到
        if (navigator.plugins[key].filename == 'np-mswmp.dll') {
          return !result;
        }
      }
      return result;
    }

4.最终判断:_is__browser_Error、 _is_shell、 checkChromeFor360()三个相关值进行页面显示。

 if (!_is__browser_Error || _is_shell || checkChromeFor360()) {
      // 异常浏览器的操作
      let __t_m_p = document.getElementById('app');
      let tmp =
        ' <!--<h1>请使用<a style="color: #1b00ff;text-decoration: underline;" >chrome浏览器</a>访问当前页面</h1>--> <div id="loader-wrapper"><div class="loader-section section-left"></div> <div class="load_title"><a href="https://www.google.cn/chrome/">下载Chrome</a></div></div>';
      __t_m_p.innerHTML = tmp;
      __t_m_p.id = 'apps';
    }

完整代码截图:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于项目内浏览器限制问题(VUE) 的相关文章

随机推荐

  • 【数字信号处理2】IIR 滤波器设计

    一 实验目的 1 掌握冲激响应法和双线性变换法设计IIR滤波器的原理及具体设计方法 熟悉用双线性设计法设计低通 带通和高通IIR数字滤波器的计算机程序 2 熟悉模拟Butterworth滤波器的设计 掌握冲激响应法和双线性变换法设计数字II
  • C++——命名空间(namespace)

    目录 1 C语言命名冲突 2 命名空间定义 3 命名空间使用 可能大家在看别人写的C 代码中 在一开始会包这个头文件 include
  • Mac下抓包工具Charles的使用

    一 简介 Charles是目前最强大的http调试工具 在界面和功能上远强于Fiddler 1 1 界面功能 工具条包含了Charles的大部分功能 右键请求出现菜单 Charles的右键菜单功能比fiddler强大太多了 双击请求进入列表
  • Python+Selenium框架设计篇1- 价值好几K的框架,不看别后悔,过时不候

    1 什么是自动化测试框架 在了解什么是自动化测试框架之前 先了解一下什么叫框架 框架是整个或部分系统的可重用设计 表现为一组抽象构件及构件实例间交互的方法 另一种定义认为 框架是可被应用开发者定制的应用骨架 前者是从应用方面 而后者是从目的
  • 8579 链式线性表的基本操作

    8579 链式线性表的基本操作 题干 8579 链式线性表的基本操作 时间限制 1000MS 代码长度限制 10KB 提交次数 5567 通过次数 2176 题型 编程题 语言 G GCC Description 编写算法 创建一个含有n个
  • 初步认识Thread网络

    Thread网络 说明 本文档内容参考自 https openthread google cn guides 是基于这个官方文档内容进行的添加一些个人理解的介绍文档 文档内容仅能作为对thread 网络的一个概念学习和参考 基本概念 Thr
  • 前端页面如何适应不同屏幕分辨率常用做法

    为什么80 的码农都做不了架构师 gt gt gt 1 根据几个浏览器分辨率统计平台得到数据现在使用1200分辨率以下用户极少 但我们CSS布局时仍然需要至少考虑1024px分辨率用户 2 使用css media 属性针对不同的屏幕加载不同
  • MarkDown软件Typora图片上传解决方案:Typora+PicGo图床

    MarkDown软件Typora图片上传解决方案 Typora PicGo图床 一 问题描述 今天在网上学习Java开发环境配置 想在CSDN上写篇博客记录安装及环境配置过程 经过在网上的调研 相当一部分的程序员都喜欢用一款名为 Typor
  • unity 射线检测真机失效_用Unity的RaycastCommand实现子弹的碰撞检测碰到的大坑

    首先放个视频来展示一下 星之海的阿斯特莉娅 最新的开发进度吧 加入了防空系统 可以拦截敌人的导弹 https www bilibili com video BV1i541167BY 假装这里有视频 b站换成bv号了 这里好像还不支持 然后来
  • 计算机毕业设计-基于SSM的音乐推荐管理系统

    项目摘要 中国风音乐推介网站近年来已成为风靡全球的新兴艺术形式 国内涌现出了大批优秀 有才华的爱好者和许多经久不衰的经典作品 中国风音乐推介网站的兴起打破了音乐界格局 也突破了原有分类唱法发展中的瓶颈 为声乐艺术的发展开辟了新篇章 这种新兴
  • 关于mapper在service层注入报错

    关于mapper在service层注入报错 有如下三种解决的方案 1 在主类Application class上添加 MapperScan basePackages 自己的mapper包 2 在mapper接口上添加 Mapper 和第一种
  • MySQL优化五-高性能的8个索引策略

    正确创建和使用索引策略是实现高性能查询的基础 本文总结7个索引策略 一 独立的列 独立的列是指索引不能是表达式的一部分 也不能是函数的参数 mysql gt select id from actor where id 1 5 错误 mysq
  • 用Python快速将ppt制作成配音视频课件的方法

    老猿Python博文目录 一 引言 老猿从来没有录播个视频课件 但最近有要求在一周内必须录制一个视频课件 为此花了3天时间准备ppt 花了一个小时录播了一个20多分钟的课件 由于第一次干这个活 讲课时情绪还是有点紧张 导致录播的语音出现了各
  • ABAP OPEN SQL详解

    本章目录 概要 OPEN SQL 读取数据 1 概要 1 1 R 3体系结构 学习SQL之前先了解一下R 3体系结构 如 图1 所示 SAP R 3一共分为三层结构 其中应用层和数据库层由单独的系统构成 1 表示层 表示层 Presenta
  • Spring IOC容器初始化主流程

    1 Spring IOC容器体系 IoC容器是Spring的核 模块 是抽象了对象管理 依赖关系管理的框架解决 案 Spring 提供了很多的容器 其中 BeanFactory 是顶层容器 根容器 不能被实例化 它定义了所有 IoC 容器
  • 现代cpu的合并写技术对程序的影响

    对于现代cpu而言 性能瓶颈则是对于内存的访问 cpu的速度往往都比主存的高至少两个数量级 因此cpu都引入了L1 cache与L2 cache 更加高端的cpu还加入了L3 cache 很显然 这个技术引起了下一个问题 如果一个cpu在执
  • C++之关于rand()每次产生随机数都相同问题

    C 的随机数函数rand是一个伪随机数 根据固定的初始种子和算法计算得出 所以每次运行获取到的随机数序列是相同的 要解决这个问题 需要设置一个随机数种子 一般我们使用当前时间作为种子 include
  • go-cqhttp:[禁止登录]登录失败,建议升级最新版本后重试,或通过问题反馈与我们联系。(错误码:45)

    token失效 禁止登录 登录失败 建议升级最新版本后重试 或通过问题反馈与我们联系 错误码 45 禁止登录 登录失败 建议升级最新版本后重试 或通过问题反馈与我们联系 使用go cqhttp开发QQ机器人的时候遇到的问题 登录的时候报错
  • 【uniapp】如何手动实现让input文本框聚焦

    开发中遇到一个问题 希望在每次操作页面完成后 input文本框都能自动聚焦 那么问题来了 应该怎么做 接下来请继续往下看 也许大多数同学都会这么做 尝试过修改文本框属性focus为 true 但是没有效果 参考如下
  • 关于项目内浏览器限制问题(VUE)

    目的 限制项目在某些浏览器中打开 代码位置如图 1 获取用户代理 navigator userAgent 拓展 属性 输出值 navigator appCodeName 浏览器代号 Mozilla navigator appName 浏览器