JHS-enhance README

The project's README from github.com/fireinrain/JHS-enhance. As one markdown file: README.md.

JHS-enhance

Jav-鉴黄师 油猴脚本 — 工程化重构版本

基于 vite-plugin-monkey 脚手架,将原 10,000+ 行单体脚本拆分为 56 个可维护的 ES Module 模块,支持本地开发热更新、一键构建。


安装

请先确保浏览器已安装 Tampermonkey 扩展。

一键安装

Install

点击上方按钮,Tampermonkey 会自动弹出安装提示。安装后脚本会自动更新(Tampermonkey 默认每天检查一次更新)。

手动安装

  1. 从 Releases 页面下载最新 jhs-enhance.user.js
  2. 打开 Tampermonkey 管理面板 → 拖入文件安装

功能概览

列表页增强

详情页增强

115 网盘集成

数据管理

自动化任务

其他


想法与交流

兄弟们还有其他的想法或问题,欢迎在 issue 中讨论。

项目结构

JHS-enhance/
├── src/
│   ├── main.js                  # 入口文件:全局初始化、插件注册、页面启动、loading/Toast/Viewer 全局函数
│   ├── core/                    # 基础设施层(7 个模块)
│   │   ├── constants.js         # 全局常量、CSS 样式、页面类型判断、枚举值
│   │   ├── base-plugin.js       # 插件基类(含 SVG 图标、页面信息解析、getBean 跨插件调用)
│   │   ├── plugin-manager.js    # 插件管理器(注册、CSS 注入、插件生命周期、按站点分组)
│   │   ├── globals.js           # 全局依赖挂载(jQuery、localforage、layer 等)
│   │   ├── storage.js           # IndexedDB 存储管理器(localforage 封装,含缓存)
│   │   ├── utils.js             # 工具函数集(DOM 操作、弹窗确认、快捷键、重试、日期格式化)
│   │   └── gmHttp.js            # GM_xmlhttpRequest 封装(GET/POST/Form/File、超时重试、分块下载)
│   ├── api/                     # API 层(4 个模块)
│   │   ├── javdb.js             # JavDB API 封装(签名算法、搜索、评论、磁力列表)
│   │   ├── dmm.js               # DMM 预览视频获取(多画质、默认画质选择)
│   │   ├── dmm-graphql.js       # DMM GraphQL API(备选视频源回退)
│   │   └── dmmrsc.js            # DMMRSC API(视频多源解析、高清封面获取)
│   ├── lib/                     # 第三方补丁库
│   │   ├── gm-xhr-parallel.js   # Tampermonkey MV3 并行请求修复(redirect: manual)
│   │   └── hls-runtime.js       # HLS 视频播放运行时(hls.js 封装、进度记忆、画质切换)
│   └── plugins/                 # 插件层(42 个功能插件)
│       ├── list-page.js         # 列表页过滤与状态标签渲染
│       ├── list-page-button.js  # 列表页功能按钮(待鉴定/已收藏/新作品/黑名单管理)
│       ├── detail-page.js       # 详情页数据加载与基础增强
│       ├── detail-page-button.js# 详情页操作按钮(下载高清封面 + 115 目录预加载 + 磁力排序过滤面板)
│       ├── setting.js           # 设置面板(Tab 页:基础/任务/域名/快捷键/屏蔽/缓存/标记删除/打赏作者;含 115 自动重命名开关 + 范围选择)
│       ├── translate.js         # 标题翻译(Google 翻译 API,原始标题缓存)
│       ├── preview-video.js     # DMM 预览视频播放器
│       ├── highlight-magnet.js  # 磁力链接高亮 + 排序 + 过滤(多键排序、并集过滤、4K 高亮)
│       ├── auto-page.js         # 自动翻页
│       ├── blacklist.js         # 黑名单管理(屏蔽演员/番号/关键词)
│       ├── favorite-actresses.js# 收藏演员同步与高亮
│       ├── new-video.js         # 新作品检测与通知
│       ├── task.js              # 后台任务调度(黑名单/收藏演员/新作品定时执行)
│       ├── history.js           # 浏览历史表格
│       ├── wangpan-115.js       # 115 网盘匹配/标签/删除(含 codeParse 正则匹配、双阶段搜索、自动重命名)
│       ├── wangpan-115-task.js  # 115 网盘任务处理(文件搜索 API 封装)
│       ├── aliyun-pan.js        # 阿里云盘备份/恢复
│       ├── fc2.js               # FC2 页面处理
│       ├── fc2-by123av.js       # FC2 通过 123AV 补全番号信息
│       ├── actress-info.js      # 演员信息展示(含头像、生日、三围等)
│       ├── related.js           # 相关作品清单
│       ├── review.js            # 评论区展示
│       ├── cover-button.js      # 封面快捷按钮(SVG 图标 + 5 种封面操作)
│       ├── fold-category.js     # 分类折叠展开
│       ├── hit-show.js          # 热播榜单 + 免 VIP 查看
│       ├── top250.js            # Top250 排行榜
│       ├── nav-bar.js           # JavDB 导航栏增强
│       ├── bus-nav-bar.js       # JavBus 导航栏增强
│       ├── bus-detail-page.js   # JavBus 详情页专属处理
│       ├── bus-img.js           # JavBus 图片处理
│       ├── bus-preview-video.js # JavBus 预览视频
│       ├── image-recognition.js # 以图识图(第三方识图接口)
│       ├── screenshot.js        # 多源预览图(javfree/projectjav/javstore + 来源切换弹窗)
│       ├── subtitles.js         # 字幕搜索(整合迅雷+SubTitleCat)+ 115 多目录直传
│       ├── req115.js            # 115 网盘 API 封装(Req 基类 + Drive115 + Req115)
│       ├── magnet-hub.js        # MagnetHub 磁力搜索(6 引擎聚合、质量标签、验车截图、115 离线)
│       ├── other-site.js        # 第三方站点跳转链接
│       ├── jav-trailers.js      # JavTrailers 站点处理
│       ├── javxy-preview-video.js# DMMRSC 多源视频预览(独立按钮、聚合 API、HLS 支持)
│       ├── subtitle-cat.js      # SubTitleCat 字幕搜索(已整合,保留原文件)
│       ├── filter-title-keyword.js # 标题关键词过滤
│       └── want-watched.js      # 想看/已看视频列表
├── vite.config.mjs              # Vite + vite-plugin-monkey 配置(元数据/CDN 依赖/域名匹配)
├── package.json
└── JHS-origin.js                # 原始单体脚本(参考归档)

技术栈

类别 技术
构建工具 Vite 6 + vite-plugin-monkey 5
模块系统 ES Module
DOM 操作 jQuery 3.7
数据存储 localforage (IndexedDB)
表格组件 Tabulator 6
弹窗组件 layui-layer
Toast 通知 Toastify
图片查看 ViewerJS
二维码 QRCodeJS
哈希 blueimp-md5
代码风格 纯 JavaScript(无 TypeScript)

快速开始

安装依赖

npm install

开发模式

npm run dev

启动后会在终端输出一个本地代理服务器地址,将该地址填入 Tampermonkey 即可实现热更新开发。

生产构建

npm run build

构建产物输出到 dist/jhs-enhance.user.js,可直接安装到 Tampermonkey。


架构设计

三层架构

main.js (入口)
    │
    ├── core/       基础设施层
    │   ├── 全局常量、CSS 样式
    │   ├── 插件基类、插件管理器
    │   ├── 存储、网络、工具函数
    │   └── 全局依赖挂载
    │
    ├── api/        API 层
    │   ├── JavDB API(签名、搜索)
    │   └── DMM 视频 API
    │
    └── plugins/    插件层
        ├── 列表页插件(按站点分)
        ├── 详情页插件(按站点分)
        ├── 功能插件(翻译/黑名单/备份等)
        └── 第三方站点插件

插件机制

每个插件继承 BasePlugin,实现以下生命周期方法:

插件通过 PluginManager 统一注册和管理,按站点类型(JavDB / JavBus)分两组注册,确保不同站点加载正确的插件。

页面类型判断

isDetailPage → 作品详情页
isListPage   → 作品列表页
isFc2Page    → FC2 搜索结果页
isSearchPage → 搜索页

插件在 handle() 中通过 window.isDetailPage 等全局变量判断当前页面类型,决定是否执行逻辑。


开发指南

添加新插件

  1. 在 src/plugins/ 下创建 my-plugin.js
  2. 继承 BasePlugin,实现 getName() 和 handle()
  3. 在 src/main.js 中 import 并注册:
import { MyPlugin } from './plugins/my-plugin.js';
// 在对应站点分支中注册
pluginManager.register(MyPlugin);

访问全局服务

插件中可通过以下方式访问全局服务:

await storageManager.getSetting('key');       // 存储
await storageManager.getCarList();             // 车辆列表
this.getBean('OtherPluginName');               // 获取其他插件实例
window.utils.q(event, '确认?', callback);      // 确认弹窗
window.show.ok('操作成功');                     // Toast 通知

样式注入


赞助

如果当前项目有帮到您的话,赞助我喝瓶水/Star项目也是极好的,感谢支持 :)

赞助

构建配置

vite-plugin-monkey 在 vite.config.mjs 中配置了:


版本历史


License

MIT

JHS-enhance (fireinrain/JHS-enhance)

Searching Database…

What is this?A Tampermonkey userscript that enhances adult-video browsing and tracking sites (JavDB, JavBus and others) with magnet-link search aggregation, filtering, translation, and 115 cloud-drive integration.
Is this a standalone browser extension or does it run inside Tampermonkey?It is a Tampermonkey userscript (jhs-enhance.user.js) built with vite-plugin-monkey, not a standalone extension; it needs the Tampermonkey browser extension installed to run.
Do I need anything besides the script itself?You need a browser with the Tampermonkey extension installed; if you want to build or develop it yourself you'll also need Node.js and Vite 6 with vite-plugin-monkey.
Do I need a 115 cloud-drive account to use it?Most browsing, filtering and magnet-search features work without it, but offline downloading, auto file renaming, and subtitle uploading are tied to a linked 115 (115.com) cloud-drive account.
Which sites does it support?JavDB, JavBus, JavSee, SeeJav, FC2 (with 123AV completion) and JavTrailers, plus SubTitleCat for subtitle search.
How does the magnet search feature work?A module called MagnetHub aggregates results from six engines (Sukebei, U9A9, U3C3, BTSearch, SoKitty, ØMagnet) into one sortable, filterable table with quality tags and one-click magnet copying.
What happens if 115 can't match a filename automatically?It uses a two-stage search: an exact code match first, then a fuzzy fallback using regex, and can automatically rename irregular filenames (e.g. mdvr00317-3.mp4) into the standard code format.
Why was the script rewritten?The original single-file script had grown past 10,000 lines; it was split into 56 maintainable ES modules with a plugin architecture, Vite hot-reload for development, and one-command builds.
Does it translate video titles?Yes, it can translate titles via Google Translate with a toggle switch that persists correctly across repeated on/off use.
Creator
fireinrain
Size
1.3 MB
Stars
188
Age
1mo
Commits · 90 Days