Greasy Fork is available in English.
键盘左右键或A/D键模拟点击页面中【上一页|上一章】【下一页|下一章】按钮,双击只点击【上一章】【下一章】按钮;按下键盘上下键或W/S键进行页面内平滑滚动;按下G键加入书签;自动刷新未加载的网页。主要适配偶然中文网及其套娃网站,其他类似布局网站也通用。
- // ==UserScript==// @name 小说网站通用快捷翻页// @namespace http://tampermonkey.net/// @version 1.6// @description 键盘左右键或A/D键模拟点击页面中【上一页|上一章】【下一页|下一章】按钮,双击只点击【上一章】【下一章】按钮;按下键盘上下键或W/S键进行页面内平滑滚动;按下G键加入书签;自动刷新未加载的网页。主要适配偶然中文网及其套娃网站,其他类似布局网站也通用。// @author coccvo// @include *// @match https://www.or77.net/*// @match https://www.69shuba.pro/*// @match https://69shuba.cx/*// @match https://tieba.baidu.com/*// @exclude https://www.bilibili.com/video/*// @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAB60lEQVR42m2SyUtbURTGT0tXbbF/QaGULoJd2C66kLYKom4UBQVnECcQMbpwEUWCA4a4CahIIk5RUYTgTkF04YSKIA44PVDEIULACVEDMUafv/AeiYqPj8c99/6+c88994r61ldamIveXJJXsff2tiAzedcliAEhky6XKz0qvjSviPCF4fL8ND8tBlTdFLTf8oGwq9ue/z56TxqWpApP2HB47M5KiDzrE3XqnXfW6p2zMsDTnGECxYBSDLG6QVGUnJhvXocA+Vad2iSD4YHG5ZWtg9gePOxDbcLCwuJCWfRn1SYPI1/8+2OhPVcqymc6HRd3j3jYx2g0Mink1mjfsOHueOM5Pf9Drso/4uEYDGoiPwEL7dPoh6uTIBhwq6eO3apiaHea8B9KSqSEI7sBD7BQujNb6hoa9cz3E3DLX1/Q9MNUXQ0GLNTXZLGEDOSGVv7I+k/p/y0cGgPth0HAAkSMIUSDarStRJYmHL7AI0sAYPpNezwe4pvtaWgtvd0g0FwCTQsZwMIGU62ZQyupf8nd+l0oN3gnvYKBtsIAhA1ch7O2kncxOdhmzf43WyGqTRfbuq9VPH1NZjDdwCNbs/xCO+3//WNxJA5rNM4/XoACHVFguoHu1idHoLrMoMxFEeYyxECf0Va1B/8EoujxAC7mNZQAAAAASUVORK5CYII=// @grant none// @license MIT// ==/UserScript==(function() {'use strict';// 自动点击刷新function checkAndReload() {var refreshDiv = document.querySelector('div[style="font-size:26px; color:#00F; cursor:hand; text-align:center;"][onclick="location.reload();"]');if (refreshDiv) {console.log("Refresh div found. Reloading the page...");location.reload();} else {console.log("Refresh div not found.");}}window.addEventListener('load', checkAndReload);document.addEventListener('visibilitychange', function() {if (document.visibilityState === 'visible') {checkAndReload();}});const SCROLL_FRACTION = 0.9; // 设置滚动距离为视口高度的百分比document.addEventListener('keydown', function(e) {// 定义一个数组包含需要处理的按键const keysToHandle = ['ArrowUp', 'ArrowDown', 'w', 's'];// 检查按键是否在需要处理的列表中,并且不在输入框内部if (keysToHandle.includes(e.key) && !isTargetInInput(e)) {// 计算滚动距离let distance = e.key === 'ArrowDown' || e.key === 's' ? window.innerHeight * SCROLL_FRACTION : -window.innerHeight * SCROLL_FRACTION;// 执行平滑滚动if ('scrollBehavior' in document.documentElement.style) {window.scrollBy({top: distance,left: 0,behavior: 'smooth'});} else {window.scrollBy(0, distance);}// 阻止按键的默认行为e.preventDefault();}}, false);// 函数:检查事件目标是否在输入框内部function isTargetInInput(event) {const tagName = event.target.tagName.toLowerCase();return tagName === 'input' || tagName === 'textarea';}// 模拟点击函数function simulateClickByText(textContent) {// 查找所有<a>标签const links = document.querySelectorAll('a');// 遍历每个<a>标签for (let i = 0; i < links.length; i++) {// 如果文本内容匹配,则模拟点击if (links[i].textContent.trim() === textContent) {links[i].click();return true;}}return false;}// 检测是否存在下一页按钮function hasNextPageButton() {return simulateClickByText('下一页') || simulateClickByText('下一页>');}function hasLastPageButton() {return simulateClickByText('上一页') || simulateClickByText('上一页>');}// 模拟点击书签函数function simulateBookmarkClick() {// 查找具有特定文本内容的<span>元素const bookmarkButton = document.querySelector('span[onclick*="AddShuQian"]');if (bookmarkButton) {console.log('Bookmark button found:', bookmarkButton);bookmarkButton.click();} else {console.log('Bookmark button not found.');}}// 双击检测变量let clickTimer = null;// 监听键盘事件document.addEventListener('keydown', function(e) {// 判断触发事件的元素是否为输入框,如果是则直接返回if (e.target.tagName === 'INPUT' || e.target.tagName === 'TEXTAREA') {return;}// 左键或 'a' 键(上一页|上一章)if (e.key === 'ArrowLeft' || e.key === 'a') {if (clickTimer == null) {clickTimer = setTimeout(function() {if (hasLastPageButton()) {// 如果存在上一页按钮,则点击simulateClickByText('上一页');simulateClickByText('<上一页');} else {// 如果不存在上一页按钮,则点击上一章simulateClickByText('上一章');}clickTimer = null; // 重置定时器}, 500); // 500毫秒内无第二次点击则执行单击操作} else {// 检测到双击,取消定时器,执行双击操作clearTimeout(clickTimer);clickTimer = null;simulateClickByText('上一章');}}// 右键或 'd' 键(下一页|下一章)else if (e.key === 'ArrowRight' || e.key === 'd') {if (clickTimer == null) {clickTimer = setTimeout(function() {if (hasNextPageButton()) {simulateClickByText('下一页');simulateClickByText('下一页>');} else {simulateClickByText('下一章');}clickTimer = null;}, 500);} else {clearTimeout(clickTimer);clickTimer = null;simulateClickByText('下一章');}}// 'g' 键(收藏书签)else if (e.key === 'g') {simulateBookmarkClick();}});})();