您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
在各字幕組分區新增一鍵「複製磁連」及「特定複製」按鈕。「特定複製」可輸入關鍵字,只複製標題含該關鍵字的磁連
// ==UserScript== // @name 蜜柑計劃 一鍵複製磁連 // @namespace http://tampermonkey.net/ // @version 1.3.1 // @description 在各字幕組分區新增一鍵「複製磁連」及「特定複製」按鈕。「特定複製」可輸入關鍵字,只複製標題含該關鍵字的磁連 // @author shanlan (grok-4-fast-reasoning) // @match https://mikanani.me/Home/* // @icon https://www.google.com/s2/favicons?sz=64&domain=mikanani.me // @grant none // @run-at document-end // @license MIT // ==/UserScript== (function() { 'use strict'; function notify(msg) { const n = document.createElement('div'); n.style.position = 'fixed'; n.style.left = '50%'; n.style.top = '50%'; n.style.transform = 'translate(-50%, -50%)'; n.style.backgroundColor = 'rgba(0,0,0,0.7)'; n.style.color = 'white'; n.style.padding = '12px 24px'; n.style.borderRadius = '8px'; n.style.zIndex = '9999'; n.style.fontSize = '30px'; n.style.boxShadow = '0 2px 12px rgba(0,0,0,0.2)'; n.textContent = msg; document.body.appendChild(n); setTimeout(() => { n.style.transition = 'opacity 1s'; n.style.opacity = '0'; setTimeout(() => { n.remove(); }, 1000); }, 3000); } function main() { // 只針對有 id 屬性的 div.subgroup-text(即字幕組區塊),排除 header2-text const subgroupDivs = document.querySelectorAll('div.subgroup-text[id]'); subgroupDivs.forEach(div => { const btn = document.createElement('button'); btn.textContent = '複製磁連'; btn.style.marginLeft = '10px'; btn.style.padding = '2px 6px'; btn.style.fontSize = '12px'; // 新增「特定複製」按鈕 const specificBtn = document.createElement('button'); specificBtn.textContent = '特定複製'; specificBtn.style.marginLeft = '5px'; specificBtn.style.padding = '2px 6px'; specificBtn.style.fontSize = '12px'; // 避免重複添加(檢查兩個按鈕) if (![...div.children].some(c => c.tagName === 'BUTTON' && (c.textContent.includes('複製磁連') || c.textContent.includes('特定複製')))) { div.appendChild(btn); div.appendChild(specificBtn); } btn.addEventListener('click', () => { // 原邏輯:複製所有磁連 let table = null; const parent = div.parentElement || document; const tables = Array.from(parent.querySelectorAll('table')); table = tables.find(t => (div.compareDocumentPosition(t) & Node.DOCUMENT_POSITION_FOLLOWING)); if (!table) { table = tables.find(t => t.querySelector('a.js-magnet')); } if (!table) { console.log('未找到對應的磁連列表 (table)'); notify('未找到對應的磁連列表,請稍候或重新載入頁面'); return; } const magnetAnchors = table.querySelectorAll('a.js-magnet, a.magnet-link, a[href^="magnet:"]'); const magnets = []; magnetAnchors.forEach(anchor => { // 優先 data-clipboard-text,沒有就用 href const fullText = anchor.getAttribute('data-clipboard-text') || anchor.getAttribute('href') || ''; if (fullText) { const match = fullText.match(/^(magnet:\?xt=urn:btih:[^&]+)/); if (match) { magnets.push(match[1]); } else if (fullText.startsWith('magnet:')) { magnets.push(fullText); } } }); if (magnets.length === 0) { console.log('未找到任何磁連!'); notify('未找到任何磁連'); return; } const result = magnets.join('\n'); if (typeof GM_setClipboard !== 'undefined') { GM_setClipboard(result, 'text'); } else { const textarea = document.createElement('textarea'); textarea.value = result; document.body.appendChild(textarea); textarea.select(); document.execCommand('copy'); document.body.removeChild(textarea); } notify('已複製 ' + magnets.length + ' 個磁連,如果有沒複製到的請點擊右下角『顯示更多』'); }); // 新增邏輯:特定複製(過濾標題含關鍵字的磁連) specificBtn.addEventListener('click', () => { const keyword = prompt('請輸入關鍵字(用於過濾標題):', ''); if (!keyword || keyword.trim() === '') { notify('未輸入關鍵字,取消操作'); return; } const kwd = keyword.toLowerCase().trim(); // 忽略大小寫 let table = null; const parent = div.parentElement || document; const tables = Array.from(parent.querySelectorAll('table')); table = tables.find(t => (div.compareDocumentPosition(t) & Node.DOCUMENT_POSITION_FOLLOWING)); if (!table) { table = tables.find(t => t.querySelector('a.js-magnet')); } if (!table) { console.log('未找到對應的磁連列表 (table)'); notify('未找到對應的磁連列表,請稍候或重新載入頁面'); return; } // 遍歷 table 的每一行 <tr> const rows = table.querySelectorAll('tr'); const magnets = []; rows.forEach(row => { const titleLink = row.querySelector('a.magnet-link-wrap'); if (titleLink && titleLink.textContent.toLowerCase().includes(kwd)) { const magnetAnchor = row.querySelector('a.js-magnet'); if (magnetAnchor) { const fullText = magnetAnchor.getAttribute('data-clipboard-text') || magnetAnchor.getAttribute('href') || ''; if (fullText) { const match = fullText.match(/^(magnet:\?xt=urn:btih:[^&]+)/); if (match) { magnets.push(match[1]); } else if (fullText.startsWith('magnet:')) { magnets.push(fullText); } } } } }); if (magnets.length === 0) { console.log('未找到匹配的磁連!'); notify('未找到包含關鍵字「' + keyword + '」的磁連'); return; } const result = magnets.join('\n'); if (typeof GM_setClipboard !== 'undefined') { GM_setClipboard(result, 'text'); } else { const textarea = document.createElement('textarea'); textarea.value = result; document.body.appendChild(textarea); textarea.select(); document.execCommand('copy'); document.body.removeChild(textarea); } notify('已複製 ' + magnets.length + ' 個匹配的磁連,如果有沒複製到的請點擊右下角『顯示更多』'); }); }); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', main); } else { main(); } })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址