我的开源项目分享-基于SharpBrowser二次开发的定制浏览器,过程中填坑无数

为什么要定制浏览器

客户的管理系统要求加强身份验证,仅允许固定的电脑登录。针对这个需求,考虑用定制的浏览器,为请求加上设备ID请求头,然后在管理系统中验证设备ID,没有登记过的设备ID不允许访问。

选型

问了几个AI,推荐SharpBrowser,查看项目最近更新时间是去年,自我介绍说是目前速度最快、功能最完备的开源C# 网页浏览器。实际用下来发现这个牛吹得有点大,开发过程中填坑无数,下面是开发日志记录。

开发说明

本项目基于SharpBrowser(最近更新日期为2025年4月),使用下来发现有不少错误,还缺乏一些基本功能,列举如下:

  1. 不支持alert、prompt、confirm,一旦网页调用这些导致程序崩溃。
  2. 没有处理window.open,导致window.open没有返回值导致脚本运行出错。
  3. 下载页面有错,没有显示文件的下载日期,排序也有问题,没有限制下载列表数量(数量多时会导致出错)。
  4. 其它若干小错误,这里不一一列举。

错误修正

  1. 调整setup安装包脚本的绝对路径,改用相对路径。
  2. 修正放在bin目录下的storage,改为放在代码区,改名为inbuilt(内嵌文件)。
  3. 修正下载页面日期时间显示不正确的错误。
  4. 修正执行window.open也弹出标签页,但window.open无返回值,导致js程序出错的问题。

新增功能

  1. 本地化调整,翻译英文界面为中文。
  2. 下载页面增加"打开文件所在的文件夹"功能。
  3. 增加对公司(文双软件)打印管理器的支持(自定义协议),点击自定义协议的链接按钮,调用公司的打印管理器。
  4. 增加设备ID功能,在每个请求头中加上设备ID,可用于补充安全认证,可配合服务器端进行签名认证。
  5. 增加设置页面,提供主页设置,设备ID查看和设备密钥设置(用于签名认证)。
  6. 针对Cef无法播放H.264的问题,改造选择上传文件功能,当选择mp4等不支持的视频时,自动转换成webm格式,取代原mp4视频。
  7. 补上alert、prompt、confirm支持。

构建说明

  1. 代码不含转换视频的ffmpeg.exe文件,请在官网自行下载,地址:https://www.gyan.dev/ffmpeg/builds/#release-builds。
  2. 下载后的ffmpeg.exe放到src\bin\net8.0-windows\下即可。
  3. 安装包工具Inno Setup version 6.7.1,默认不含中文语言包,请在官网单独下载ChineseSimplified.isl,放到安装目录的Languages子目录下。

开发感想

cef不支持H.264是个硬伤,有资源时考虑重新编译cef支持H.264,目前没有符合编译要求的高配置设备(据说编译过程也很漫长费力)。

开源项目地址

https://gitee.com/eameta/sharpbrowser/