Adds quick actions for video IDs on supported sites (copy, JavDB jump, custom search), displays and allows editing of JavDB watch status/rating, and adds version jump buttons to Missav player pages. Features are individually toggleable.
< Feedback on Javdb Redirection for AV Sites
字幕需要外挂
是什么意思?Missav能外挂字幕?
不是,下载后在本地外挂字幕,有个快捷按钮方便些
这个功能和本脚本功能有差异,暂时就不内置进去了。另写了个专门实现你需求功能的脚本,你把下面代码复制新建个脚本就行了。效果如图,点击按钮打开字幕猫搜索结果新标签页。
// ==UserScript==
// @name MissAV Subtitle Searcher
// @name:zh-CN MissAV 字幕搜索器
// @namespace http://tampermonkey.net/
// @version 1.7
// @description Uses MutationObserver for reliability and better regex for compatibility. Adds a button to search for subtitles on Subtitlecat.
// @description:zh-CN 使用 MutationObserver 提升可靠性,并通过更优的正则表达式增强兼容性。在 MissAV 页面上添加一个按钮用于搜索字幕。
// @author Gemini
// @match *://missav.*/*
// @grant none
// @icon https://subtitlecat.com/favicon.ico
// ==/UserScript==
(function() {
'use strict';
/**
* 监视指定的DOM节点,直到回调函数返回true。
* @param {Node} targetNode - 被监视的DOM节点。
* @param {function(): boolean} callback - 每次DOM变动时执行的回调函数。该函数应在任务完成时返回true,以停止监视。
*/
function observeDOM(targetNode, callback) {
const observer = new MutationObserver((mutationsList, obs) => {
// 每次DOM变化时,都尝试执行回调函数
if (callback()) {
// 如果回调函数返回true(表示成功执行),则停止监视
obs.disconnect();
// console.log('Observer disconnected.');
}
});
// 配置监视器以观察子节点和后代节点的变化
const config = { childList: true, subtree: true };
observer.observe(targetNode, config);
// 初始执行一次,以防目标元素在脚本运行时已经存在
if (callback()) {
observer.disconnect();
// console.log('Observer disconnected on initial check.');
}
}
/**
* 脚本主函数,负责查找元素、提取番号并添加按钮。
* @returns {boolean} - 如果成功添加按钮或确定无需再执行,则返回true;否则返回false。
*/
function main() {
const idSelector = 'div.space-y-2 div.text-secondary span.font-medium';
const buttonContainerSelector = 'div.flex.flex-wrap.justify-center.space-x-4.md\\:space-x-6.py-8.rounded-md.shadow-sm';
// 检查按钮是否已存在,防止重复添加
if (document.getElementById('subtitle-search-button')) {
return true; // 任务已完成,告知观察者停止
}
const idElement = document.querySelector(idSelector);
const buttonContainer = document.querySelector(buttonContainerSelector);
// 只有当两个目标元素都存在时,才执行核心逻辑
if (!idElement || !buttonContainer) {
return false; // 目标元素尚未加载,告知观察者继续监视
}
// --- 提取番号、创建和添加按钮的逻辑 ---
const originalId = idElement.textContent.trim();
// 优化后的表达式,兼容更多格式
// 优先匹配 [字母-数字] 格式,其次匹配由字母、数字、连字符、下划线组成的通用番号
const match = originalId.match(/([a-zA-Z]+-\d+)|([a-zA-Z0-9_]+-\d+)|([a-zA-Z0-9]+)/i);
// match 结果是一个数组,第一个有效捕获组或整体匹配是我们的目标
const cleanedId = match ? (match[1] || match[2] || match[0]) : '';
if (!cleanedId) {
// 如果ID元素存在但无法匹配,也视为完成,停止监视
console.log('Subtitle Searcher: ID found but could not be parsed.');
return true;
}
const searchUrl = `https://subtitlecat.com/index.php?search=${cleanedId}`;
const newButton = document.createElement('a');
newButton.id = 'subtitle-search-button'; // 添加ID以便检查和停止重复执行
newButton.href = searchUrl;
newButton.target = '_blank';
newButton.rel = 'noopener noreferrer';
newButton.className = 'inline-flex items-center whitespace-nowrap text-sm text-nord4 leading-4 font-medium focus:outline-none hover:text-nord6';
newButton.innerHTML = `
<span class="mr-1 md:mr-2 text-base" style="font-family: sans-serif;">🅭</span>
<span>字幕</span>
`;
buttonContainer.prepend(newButton);
console.log(`Subtitle Searcher: Button added for ID: ${cleanedId}`);
return true; // 任务已完成,告知观察者停止
}
// 启动监视,目标是整个文档的body,以确保能捕捉到所有动态内容
observeDOM(document.body, main);
})();
大佬牛逼,感谢
博主你好,因为missav是无码和中字选一的,字幕需要外挂,希望可以在missav界面挂载一个字幕快捷搜索按钮,字幕猫(https://subtitlecat.com/)对于av字幕比较全,希望可以添加~!