基于Browscap对浏览器工具类优化

这篇具有很好参考价值的文章主要介绍了基于Browscap对浏览器工具类优化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

项目背景

原有的启动平台公共组件库comm-util的浏览器工具类BrowserUtils是基于UserAgentUtils的,但是该项目最后一个版本发布于 2018/01/24,之至今日23年底,已有5年没有维护更新,会造成最新版本的部分浏览器不能正确获取到浏览器信息。(至于为什么停更了获取不到最新浏览器和操作系统信息了呢,文末给大家揭晓。)以至于公司的项目组团队不得已去寻找其他解决方案,做该工具类的优化更新。于是我们来到的项目官网,看到了官方公告也提示项目已停止更新,官方建议使用Browscap做代替。如下图:

基于Browscap对浏览器工具类优化

开始改造

1、maven依赖替换

替换前

<dependency>
   <groupId>eu.bitwalker</groupId>
   <artifactId>UserAgentUtils</artifactId>
   <version>1.21</version>
</dependency>

替换后

<dependency>
    <groupId>com.blueconic</groupId>
    <artifactId>browscap-java</artifactId>
    <version>1.4.1</version>
</dependency>

说明:browscap-java的1.4.1版本实在2023年7月维护的

2、公共方法抽取

原有实现是基于UserAgentUtils的,首先从请求头中获取到User-Agent,再通过parseUserAgentString()方法获取到UserAgent对象,然后在调用对象的getBrowser()方法获取到浏览器对象Browser,进而获取到浏览器相关信息。

private static Browser getBrowser(HttpServletRequest request) {
    return UserAgent.parseUserAgentString(request.getHeader("User-Agent")).getBrowser();
}

现有实现是基于的,首先获取到UserAgentParser对象,基于对象的parse()方法去解析请求头,进而获取Capabilities对象,基于Capabilities对象的getValue()方法获取客户端浏览器和客户端操作系统等信息。

private static Capabilities getCapabilities(HttpServletRequest request) {
    try {
        UserAgentParser userAgentParser = new UserAgentService().loadParser();
        return userAgentParser.parse(request.getHeader("User-Agent"));
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}

3、获取远程客户端系统名称

改造前

public static String getOsName(HttpServletRequest request) {
    UserAgent userAgent = UserAgent.parseUserAgentString(request.getHeader("User-Agent"));
    return userAgent.getOperatingSystem().getName();
}

改造后

public static String getOsName(HttpServletRequest request) {
    Capabilities capabilities = getCapabilities(request);
    return capabilities.getPlatform();
}

4、获取远程客户端系统版本

public static String getOsVersion(HttpServletRequest request) {
    Capabilities capabilities = getCapabilities(request);
    return capabilities.getPlatformVersion();
}

改造前,并不支持

5、获取远程客户端浏览器名称

改造前

public static String getBrowserName(HttpServletRequest request) {
    Browser browser = getBrowser(request);
    return browser.getName();
}

改造后

public static String getBrowserName(HttpServletRequest request) {
    Capabilities capabilities = getCapabilities(request);
    return capabilities.getBrowser();
}

6、获取远程客户端浏览器版本

改造前

public static String getBrowserVersion(HttpServletRequest request) {
    Browser browser = getBrowser(request);
    Version version = browser.getVersion(request.getHeader("User-Agent"));
    return version.getVersion();
}

改造后

public static String getBrowserVersion(HttpServletRequest request) {
    Capabilities capabilities = getCapabilities(request);
    return capabilities.getBrowserMajorVersion();
}

7、至于其他方法,大家自行拓展验证

改造验证

1、浏览器信息准备

基于Browscap对浏览器工具类优化

2、main方法验证

public static void main(String[] args) {
    final String userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36";
    try {
        UserAgentParser userAgentParser = new UserAgentService().loadParser();
        Capabilities capabilities = userAgentParser.parse(userAgent);
        System.out.println("系统名称==>" + capabilities.getPlatform() + "/" + capabilities.getPlatformVersion());
        System.out.println("浏览器信息==>" + capabilities.getBrowser() + "/" + capabilities.getBrowserMajorVersion());
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}

3、验证结果:可以正确识别

基于Browscap对浏览器工具类优化

结尾彩蛋

为什么原有的工具类不能获取最新的浏览器和操作系统的信息呢?跟下源码你就明白了

操作系统信息封装

Windows

基于Browscap对浏览器工具类优化

Android

基于Browscap对浏览器工具类优化

Symbian
基于Browscap对浏览器工具类优化

浏览器信息的封装

Edge

基于Browscap对浏览器工具类优化

Chrome

基于Browscap对浏览器工具类优化

项目地址

Gitee:https://gitee.com/startdis/startdis-comm

Github:https://github.com/startdis/startdis-comm

Gitlab:https://gitlab.com/startdis/startdis-comm

基于Browscap对浏览器工具类优化文章来源地址https://www.toymoban.com/news/detail-748972.html

到了这里,关于基于Browscap对浏览器工具类优化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 面试:浏览器常见问题-优化与兼容

    前端开发浏览器优化方案有哪些? 以下是一些前端开发中常用的浏览器优化方案: 减少HTTP请求数量:将多个CSS和JavaScript文件合并为一个文件,使用CSS sprites来减少图片请求数量,使用字体图标替代小图标等,可以减少HTTP请求,加快页面加载速度。 压缩和合并文件:使用压

    2024年02月15日
    浏览(41)
  • 【前端八股文】浏览器系列:性能优化——HTML、CSS、JS、渲染优化

    本系列目录:【前端八股文】目录总结 是以《代码随想录》八股文为主的笔记。详情参考在文末。 代码随想录的博客_CSDN博客-leecode题解,ACM题目讲解,代码随想录领域博主 性能优化,从以下几个方面来进行。 避免HTML中直接写CSS viewport加速页面渲染 使用语义化标签 减少标签的

    2023年04月20日
    浏览(61)
  • 浏览器层面优化前端性能(1):Chrom组件与进程/线程模型分析

    现阶段的浏览器运行在一个单用户,多合作,多任务的操作系统中。一个糟糕的网页同样可以让一个现代的浏览器崩溃。其原因可能是一个插件出现bug,最终的结果是整个浏览器以及其他正在运行的标签被销毁。 现代操作系统已经非常健壮了,它让应用程序在各自的进程中运

    2023年04月09日
    浏览(50)
  • 基于selenium实现多个脚本只打开一次浏览器(重复使用浏览器)

    本文思路来源【Selenium】控制当前已经打开的 chrome浏览器窗口(高级版)_是小菜欸的博客-CSDN博客 selenium 自动打开Chrome浏览器且重复使用已打开的Chrome实例_飞扬的箭的博客-CSDN博客 但是这一篇文章的方式对于我来说有一个缺点,即每一次都需要新创建一个浏览器,或者需要

    2024年02月16日
    浏览(40)
  • 项目实践之浏览器安全(持续更新...)

    本质:恶意代码未经过滤,与网站正常的代码混在一起;浏览器无法分辨哪些脚本是可信的,导致恶意脚本被执行。 根据攻击的来源,XSS 攻击可分为存储型、反射型和 DOM 型三种。 1、存储型攻击步骤:     1,攻击者将恶意代码提交到目标网站的数据库中。     2,用

    2024年02月04日
    浏览(52)
  • 谷歌浏览器调试vue项目

    前言          众所周知,在项目过程中我们常常遇到的一个问题就是本地调试的时候没问题但是发布到线上的时候就不行了。在时间充裕的情况下,我们当然可以慢慢调试,但是那是不可能的。在线上遇到问题时,难免会倍感压力和焦虑,这个时候就有必要强化前端的调试能力了

    2024年02月03日
    浏览(51)
  • 10款最佳跨浏览器测试工具,建议收藏

    跨浏览器测试工具对于检查您的网络应用程序在桌面端、移动端、平板电脑和其他设备类别中是否正常工作至关重要。这些工具检查 UI 不一致、验证代码、跨 Chrome、Firefox、IE、Edge、Safari 和其他浏览器的响应能力。它们有助于跨设备和平台提供一致的用户体验。 什么是跨浏

    2024年02月07日
    浏览(45)
  • Selenium教程:自动化浏览器测试工具

    Selenium是一款用于自动化浏览器测试的工具,它提供了一系列的API和功能,使得开发人员可以编写脚本来模拟用户在浏览器中的行为。无论是在Web应用程序的功能测试、性能测试还是数据抓取方面,Selenium都是一个强大且广泛使用的工具。 在开始使用Selenium之前,您需要进行安

    2024年02月07日
    浏览(82)
  • 浏览器插件 | Font Picker - 网页字体识别工具

    目录 软件简介 Font Picker插件背景  Font Picker插件离线安装教程  Font Picker 小结 软件简介 Font Picker 插件是一款用于 Chrome 浏览器的字体选择器,这种网页字体识别工具看起来非常的干净,使用起来也十分的简单。本文提供Font Picker网页字体识别工具Chrome插件v1.0.5版本的下载:百

    2024年02月08日
    浏览(42)
  • 多浏览器同步测试工具的设计与实现

    背景 在做Web兼容测试时,测试人员往往需要在不同浏览器上重复执行相同的操作。 现有自动化录制手段,其实是后置的对比,效率与反馈都存在延迟,执行过程相对是黑盒的,过程中如果测试人员没细化到具体的校验点,即使是很明显的样式差异,脚本也很难发现。且如果

    2024年02月12日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包