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…

Что это?Пользовательский скрипт для Tampermonkey, который расширяет сайты для просмотра и отслеживания видео для взрослых (JavDB, JavBus и другие): агрегация поиска по магнитным ссылкам, фильтрация, перевод и интеграция с облачным диском 115.
Это самостоятельное браузерное расширение или оно работает внутри Tampermonkey?Это пользовательский скрипт для Tampermonkey (jhs-enhance.user.js), собранный с помощью vite-plugin-monkey, а не самостоятельное расширение; для работы требуется установленное браузерное расширение Tampermonkey.
Нужно ли что-то ещё, кроме самого скрипта?Нужен браузер с установленным расширением Tampermonkey; если хотите собрать или разрабатывать скрипт сами, понадобятся ещё Node.js и Vite 6 с vite-plugin-monkey.
Нужен ли аккаунт на облачном диске 115, чтобы пользоваться им?Большинство функций просмотра, фильтрации и магнитного поиска работают без него, но офлайн-загрузка, автоматическое переименование файлов и загрузка субтитров привязаны к подключённому аккаунту облачного диска 115 (115.com).
Какие сайты он поддерживает?JavDB, JavBus, JavSee, SeeJav, FC2 (с дополнением через 123AV) и JavTrailers, плюс SubTitleCat для поиска субтитров.
Как работает функция поиска магнитных ссылок?Модуль MagnetHub собирает результаты шести поисковых движков (Sukebei, U9A9, U3C3, BTSearch, SoKitty, ØMagnet) в одну сортируемую таблицу с фильтрами, метками качества и копированием магнитной ссылки в один клик.
Что будет, если 115 не сможет автоматически сопоставить имя файла?Используется двухэтапный поиск: сначала точное совпадение по коду, затем запасной нечёткий поиск с помощью regex; кроме того, нерегулярные имена файлов (например, mdvr00317-3.mp4) можно автоматически переименовывать в стандартный формат кода.
Почему скрипт переписали?Исходный однофайловый скрипт разросся до более чем 10 000 строк; его разбили на 56 удобных в поддержке ES-модулей с плагинной архитектурой, горячей перезагрузкой Vite при разработке и сборкой одной командой.
Переводит ли он названия видео?Да, он умеет переводить названия через Google Translate, причём переключатель включения/выключения корректно сохраняет своё состояние при многократном использовании.
Creator
fireinrain
Size
1.3 MB
Stars
188
Age
1mo
Commits · 90 Days