您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
增加页面顶部底部按钮和一键下种按钮
当前为
// ==UserScript== // @name javdb auto open // @namespace websiteEnhancement // @author jimmly // @version 2024.8.1 // @description 增加页面顶部底部按钮和一键下种按钮 // @create 2023-9-21 // @include *javdb* // @grant GM_getValue // @grant GM_setValue // @grant GM.getValue // @grant GM.setValue // @license MIT // @run-at document-idle // ==/UserScript== /** * source of GM_config https://raw.githubusercontent.com/niubilityfrontend/GM_config/v20230928/gm_config.js * @typedef { import('jquery') } $ * @typedef { import('jQuery') } jQuery */; ; (async function (loadJS) { loadJS("https://update.greasyfork.org/scripts/483173/GM_config_cnjames.js") .then(v => loadJS("https://update.sleazyfork.org/scripts/476583/common_libs_of_array.js")) .then(v => { withJQuery(function ($, win) { let w = 40, h = 40; addStyle(` a:link{color:green;} a:hover{color:red;} a:active{color:yellow;} a:visited{color:orange;} .btn1 { opacity:0.8;-moz-transition-duration:0.2s;-webkit-transition-duration:0.2s; padding:1px; margin-top:1px; font-size: 10; text-align: center; vertical-align: middle; line-height:${h}px; border-radius:5px 5px 5px 5px;cursor:pointer; left:0px;z-index:9999; background:white; width:${w}px;height:${h}px; } `); let container = $(document.createElement('div')).css({ 'cssText': `position:fixed;top:15%;width:${w}px;height:${h * 7}px;left:0px;z-index:9999` }); // 替换这些值为你的实际设置 const baseUrl = 'https://192.168.8.249:30024'; // 例如 http://localhost:8080 const username = 'admin'; const password = 'adminadmin'; // 登录到qBittorrent Web UI async function login() { const response = await fetch(`${baseUrl}/api/v2/auth/login`, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: `username=${encodeURIComponent(username)}&password=${encodeURIComponent(password)}` }); if (response.ok) { console.log('Logged in successfully.'); } else { console.error('Failed to log in.'); } return response } // 添加新的torrent下载任务 async function addTorrent(url) { const response = await fetch(`${baseUrl}/api/v2/torrents/add`, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: `urls=${encodeURIComponent(url)}` }); if (response.ok) { console.log('added successfully.'); } else { console.log('Failed to add.', response.body); } return response } // 使用 if (window.location.href.indexOf('tags') == -1) { //下载按钮 let downloadBtn = $(document.createElement('div')).text('下載').appendTo(container) .click(function () { (async () => { login() .then(v => { let torrentUrl = $('div.magnet-name.column.is-four-fifths>a').first().prop('href') return addTorrent(torrentUrl) }) .then(res => { if (res.ok) { win.close(); } else { console.log('Failed to add.', response); alert('add error') } }).catch(err => console.log(err)) })(); }); console.log('win.__t', win.__t) let //close closeBtn = $(document.createElement('div')).text('關閉').appendTo(container) .click(function () { win.open("about:blank", "_self").close(); }), //加速 fastBtn = $(document.createElement('div')).text('加速').attr('title', '加速').appendTo(container) .click(function () { if (win.__wait > 5) { win.__wait = win.__wait / 1.5 } else { win.__wait = 5 } win.___reset() }), switchBtn = $(document.createElement('div')).text(!win.__t ? '啓' : '停').appendTo(container) .click(function () { if (!win.__t) { win.__startTimer(); } else { win.__stopTimer() } }), slowBtn = $(document.createElement('div')).text('減速').attr('title', '減速').appendTo(container) .click(function () { win.__wait *= 1.5 win.___reset() }) $(document).keydown(function (event) { let e = event || win.event; let k = e.keyCode || e.which; if (k === 16) { // isCtrl = true; switchBtn.click() } else if (k === 38) { //up event.stopPropagation() slowBtn.click() } else if (k === 40) {//down event.stopPropagation() //fastBtn.click() } }) $(document).mousedown(function (e) { if (e.which == 2) { downloadBtn.click(); } }) $(win).blur(function () { win.__stopTimer() }).focus(function () { win.__startTimer(); }) win.__wait = 900 win.__step = 100; win.__startTimer = function () { win.______h = $(document).scrollTop() + win.__step; if (win.______h >= $(document).height() - $(win).height()) { win.__stopTimer() // win.__t = setTimeout(win.__startTimer, 30000) } else { $(document).scrollTop(win.______h); win.__t = setTimeout(win.__startTimer, win.__wait) } win.__syncState() }; win.__stopTimer = function () { clearTimeout(win.__t) win.__t = 0 win.__syncState() } win.___reset = function () { win.__stopTimer() win.__startTimer(); win.__syncState() } win.__syncState = function () { fastBtn.text(`${Math.floor(win.__wait)}`) slowBtn.text(`${Math.floor(win.__wait)}`) switchBtn.text(win.__t ? '停' : '啓') } } else { $('tr').hover( function () { $(this).find('*').css("background-color", "#9AAAC7") }, function () { $(this).find('*').css("background-color", ''); }); } //最顶按钮 let toTopBtn = $(document.createElement('div')).text('Top').appendTo(container) .click(function () { win.scrollTo(0, 0); }), //最低按钮 toBottomBtn = $(document.createElement('div')).text('Bottom').appendTo(container) .click(function () { win.scrollTo(0, document.body.scrollHeight); }), setBtn = $(document.createElement('div')).attr('id', 'btnSet').text('設置').appendTo(container) .click(function () { win.gmc.open(); }); container .find('div') .addClass('btn1') .hover(function (e) { let o = $(this) o.data('old_opacity', o.css('opacity')) .data('old_border', o.css('border')) o.css('opacity', 1).css('border', '1px solid black') }, function (e) { let o = $(this) o.css('opacity', o.data('old_opacity')).css('border', o.data('old_border')) }) container.appendTo('body'); autoFind(() => window.location.href.indexOf('tags') > -1, 'javdb', '.item a', el => el.attr('title'), $, setBtn); }) }) })(function (FILE_URL, async = true) { return new Promise((resolve, reject) => { let scriptEle = document.createElement("script"); scriptEle.setAttribute("src", FILE_URL); scriptEle.setAttribute("type", "text/javascript"); scriptEle.setAttribute("async", async); // success event scriptEle.addEventListener("load", () => { resolve(FILE_URL) }); // error event scriptEle.addEventListener("error", (ev) => { reject(ev); }); if (document.currentScript) document.currentScript.insertBefore(scriptEle) else (document.head || document.getElementsByTagName('head')[0]).appendChild(scriptEle); }) });