// ==UserScript== // @name 手机助手 // @namespace http://tampermonkey.net/ // @version 9.500.18.84 // @description 自动滚动,嗅探图片、视频,字体放大,去除广告浮动 // @author You // @match *://*/* // @run-at document-start // @require https://code.jquery.com/jquery-3.7.1.min.js // @require https://code.jquery.com/jquery-migrate-3.4.0.min.js // @grant GM_registerMenuCommand // @grant GM_setValue // @grant GM_getValue // @license MIT // @downloadURL none // ==/UserScript== { 'use strict'; let hengPin = screen.orientation.lock; (function($) { if (document.querySelector('.JqMA-btn-all') || window.frames.length != parent.frames.length) { return; } function docSltAll(selectPath) { let doms = Array.from(document.querySelectorAll(selectPath)); document.querySelectorAll('iframe').forEach(function(iframe) { const contentDocument = iframe.contentDocument || iframe.contentWindow.document; const selectedElements = Array.from(contentDocument.querySelectorAll(selectPath)); doms.push(...selectedElements); }); return doms; } function dqSlt(selectPath, _iframe = "iframe") { if (_iframe === "one") { return $(document.querySelector(selectPath)); } let doms; try { doms = $(selectPath); } catch (error) { doms = $(document.querySelectorAll(selectPath)); } if (_iframe === "iframe") { document.querySelectorAll('iframe').forEach(function(iframe) { const contentDocument = iframe.contentDocument || iframe.contentWindow.document; const selectedElements = contentDocument.querySelectorAll(selectPath); selectedElements.forEach(function(element) { doms.add(element); }); }); } return doms; } function removeShadowRoot() { let hasShadowRoot; const divs = document.querySelectorAll('div'); for (let i = 0; i < divs.length; i++) { let _this = divs[i]; if (_this.shadowRoot) { _this.replaceWith(..._this.shadowRoot.childNodes); hasShadowRoot = true; } } alert(hasShadowRoot ? "#shadow-root 已移除" : "#shadow-root 不存在"); } function checkImgExists(imgurl) { return new Promise(function(resolve, reject) { var ImgObj = new Image(); ImgObj.src = imgurl; ImgObj.onload = function(res) { resolve(this); } ImgObj.onerror = function(err) { reject(err) } }); } function getTouchSite(_element, event) { let rect = _element.getBoundingClientRect(); let offsetY = event.touches[0].clientY - rect.top - _element.offsetHeight / 2; let offsetX = event.touches[0].clientX - rect.left - _element.offsetHeight / 2; return [offsetX, offsetY, _element.offsetHeight]; } function getSelector(element) { let path = "", index = 0; while (index < 3 && element && element.nodeType == Node.ELEMENT_NODE) { let selector = element.nodeName.toLowerCase(); if (selector == "body") { break; } if (element.id) { selector += "#" + element.id; } else if (element.classList.length > 0) { selector += "." + Array.from(element.classList).join("."); } path = selector + " > " + path; element = element.parentNode; index++; } return path.replace(/[> ]+$/, ""); } function documentCopy(copyText) { let _input = document.createElement('input'); _input.setAttribute('style', 'position:fixed!important;clip:rect(0 0 0 0)!important;top:10px!important;'); _input.value = copyText; document.body.appendChild(_input); _input.select(); document.execCommand('copy'); document.body.removeChild(_input); } function copyToClipboard(copyText) { try { navigator.clipboard.writeText(copyText).catch(() => { documentCopy(copyText); }); } catch (error) { documentCopy(copyText); } } function getDataValue(gValName, _default) { let _data = GM_getValue(gValName, {}); let keys = Object.keys(_data); if (keys.length > 200) { delete _data[keys[0]]; GM_setValue(gValName, _data); } return [_data, _data.hasOwnProperty(currentDomain) ? _data[currentDomain] : _default]; } let addCss = GM_getValue("addCss", ""); let hidePagetual = GM_getValue("hidePagetual", 0) GM_registerMenuCommand("1:隐藏按钮 2:隐藏东方 3:添加css", function() { const element = document.querySelector(".JqMA-btn-del"); const isHide = window.getComputedStyle(element).display === "none"; let inputNum = window.prompt("1:" + (isHide ? "显示" : "隐藏") + "按钮 2:" + (hidePagetual ? "显示" : "隐藏") + "东方按钮 3:添加css", 1); if (inputNum === "1") { if (isHide) { document.querySelectorAll(Dhide ? ".JqMA-btn-del" : ".JqMA-btn-all").forEach(function(elet) { elet.style.cssText += "display:block!important;" + (Dhide ? "opacity:0.5!important;" : ""); }); } else { document.querySelectorAll(".JqMA-btn-all").forEach(function(elet) { elet.style.cssText += "display:none!important;"; }); } } else if (inputNum === "2") { hidePagetual = hidePagetual ? 0 : 1; GM_setValue("hidePagetual", hidePagetual); location.reload(false); } else if (inputNum === "3") { inputNum = window.prompt("输入css内容:", addCss); if (inputNum !== null) { GM_setValue("addCss", inputNum); location.reload(false); } } }); function changeDataFunc(_data, _default) { var changeData = window.prompt("请修改:", JSON.stringify(_data)); if (typeof JSON.parse(changeData) == "object") { changeData && alert(changeData); changeData = JSON.parse(changeData) return [changeData, changeData.hasOwnProperty(locHost()) ? changeData[locHost()] : _default] } else { return false; } } var html_style = `html,body { overflow-wrap: break-word!important; scroll-behavior: auto!important; min-height: 100vh!important; }`; var inner_style = `.JqMA-inner-all{ position: relative !important; z-index: 2147483646 !important; margin: 10vh 0 5vh 0!important; border: 0 !important; padding: 0 !important; width: 100% !important; height: auto !important; background: black !important; display: block !important; } .JqMA-inner-all, .JqMA-inner-word *, .JqMA-inner-pic * { box-sizing: border-box !important; border-radius: 0 !important; float: none !important; opacity: 1 !important; visibility: visible !important; overflow-wrap: break-word !important; filter: none!important; -webkit-filter: none!important; } .JqMA-inner-word, .JqMA-inner-word > p { color: #FEFEFE!important; text-align: left!important; font-size: calc(2.3vh + 2.3vw)!important; text-indent: 0!important; } .JqMA-inner-word > p { width: 100%!important; } .JqMA-inner-pic { text-align: center !important; font: 0 "Fira Sans", sans-serif !important; } .JqMA-inner-word *, .JqMA-inner-pic *{ margin: 0 !important; padding: 0 !important; border: 0 !important; position: static !important; } .JqMA-inner-pic *::before, .JqMA-inner-pic *::after { display: none !important; } .JqMA-inner-pic img { display: inline-block !important; width: 100% !important; height: auto !important; object-fit: contain !important; background: gray !important; } .JqMA-inner-pic > *{ vertical-align: top !important; overflow: hidden !important; } .JqMA-inner-word a, .JqMA-inner-pic a, .JqMA-mark-pageNum { background: none!important; color: #FEFEFE!important; height: calc(2.7vh + 2.7vw)!important; font-size: calc(1.7vh + 1.7vw)!important; line-height: 1.4!important; text-align: center!important; } .JqMA-mark-pageNum { width: 100%!important; } html .JqMA-inner-pic > img + a { margin-top: calc(-5.4vh - 5.4vw)!important; } html .JqMA-inner-pic > img + a + a{ margin-top: calc(-2.7vh - 2.7vw)!important; } .JqMA-inner-pic img.JqMA-css-smallPic { width: 12.5%!important; height: 8vw!important; } .JqMA-inner-pic p > a{ display: inline!important; } .JqMA-inner-word > a{ display: inline-block!important; width: 100%!important; } .JqMA-inner-pic > a { display: inline-block!important; width: 12.5%!important; margin-right: 43.75%!important; margin-left: 43.75%!important; background: rgba(0,0,0,0.2)!important; } .JqMA-inner-pic > a.JqMA-css-smallPic { display: none!important; } .JqMA-btn-all, .JqMA-inner-all, .JqMA-inner-pic * { min-width:none!important; max-width:none!important; min-height:none!important; max-height:none!important; } .JqMA-btn-all { overflow: hidden!important; opacity: 1!important; background: rgba(0,0,0,0.4)!important; color: #FEFEFE!important; display: none!important; text-align: center!important; text-indent: 0!important; line-height: 2.8!important; border-radius: 0!important; user-select: none!important; z-index: 999999999999!important; margin: 0!important; padding: 0!important; border: 0!important; font-weight: bold!important; position: fixed!important; font-size: calc(1.2vh + 1.2vw)!important; height: calc(3.2vh + 3.2vw)!important; width: calc(3.2vh + 3.2vw)!important; } html .JqMA-btn-del { display: block!important; opacity: 0.4!important; } `; var css_style = `.JqMA-mark-pageNext:not(.JqMA-mark-pageNum) { display: inline-block !important; height: 0 !important; min-height: none !important; margin: 0 !important; border: 0 !important; padding: 0 !important; overflow: hidden !important; } .JqMA-inner-word,.JqMA-inner-word > p { letter-spacing: normal !important; line-height: normal !important; overflow-wrap: break-word !important; } .JqMA-css-fixed_hide { display: none !important; } .JqMA-css-overY_auto{ overflow-y: auto!important; } .JqMA-css-transform { transform: translate(0%, 0%) !important; padding: 50vh 0!important; height: auto !important; max-height: none !important; }` + addCss; if (hidePagetual) { css_style += `.pagetual_pageBar,#pagetual-sideController { display: inline-block !important; height: 0 !important; min-height: none !important; margin: 0 !important; border: 0 !important; padding: 0 !important; overflow: hidden !important;}`; } const currentDomain = window.location.hostname; function locHost() { return currentDomain; } function getValLoc(gValName, _default) { if (locHost() == GM_getValue(gValName + "_locH")) { return GM_getValue(gValName, _default); } else { return _default; } } function setValLoc(gValName, value) { GM_setValue(gValName, value); GM_setValue(gValName + "_locH", locHost()); } let scrollJu = Math.abs(GM_getValue("scrollJu", 5)); var [DSImgData, DSImg] = getDataValue("DSImgData", 1); let minPicHD = GM_getValue("minPicHD", 500); let minPicwh = GM_getValue("minPicwh", 100), picwh = getValLoc("picwh", minPicwh); let minOuterSz = GM_getValue("minOuterSz", 10), outerSz = getValLoc("outerSz", minOuterSz); let smoothScroll = GM_getValue("smoothScroll", 0); var direction = 1; function addInput(class1, value1, style1) { let p = document.createElement('p'); p.className = "JqMA-btn-all " + class1; p.textContent = value1; document.querySelector('html').appendChild(p); inner_style += ".JqMA-btn-all." + class1 + "{" + style1 + "!important;left: 0!important;}"; } function addAllBtn() { addInput('JqMA-btn-del', 'X', "top:calc(50vh - 1.6vh - 1.6vw)"); addInput('JqMA-btn-down', '♢', "top:calc(50vh - 4.8vh - 4.8vw)"); addInput('JqMA-btn-Ju', (smoothScroll ? "`" : "") + scrollJu, "top:calc(50vh - 8vh - 8vw)"); addInput('JqMA-btn-width', "W", "top:calc(50vh - 11.2vh - 11.2vw)"); addInput('JqMA-btn-scrollDiv', 'O', "top:calc(50vh - 14.4vh - 14.4vw)"); addInput('JqMA-btn-transform', "T", "top:calc(50vh + 1.6vh + 1.6vw)"); addInput('JqMA-btn-blank ', 'B', "top:calc(50vh + 4.8vh + 4.8vw)"); addInput('JqMA-btn-pic', picwh, "top:calc(50vh + 8vh + 8vw)"); addInput('JqMA-btn-outerSz', outerSz, "top:calc(50vh + 11.2vh + 11.2vw)"); } addAllBtn(); var Dhide = getValLoc("Dhide", 1); delHide(); setTimeout(function() { widthN && document.querySelectorAll(".JqMA-btn-width").forEach(function(element) { element.textContent = widthN; }); picZ && document.querySelectorAll(".JqMA-btn-pic").forEach(function(element) { element.style.setProperty("color", "green", "important"); }); openBlank && document.querySelectorAll(".JqMA-btn-blank").forEach(function(element) { element.style.setProperty("color", "green", "important"); }); DSImg && document.querySelectorAll(".JqMA-btn-outerSz").forEach(function(element) { element.style.setProperty("color", "green", "important"); }); Drotate && document.querySelectorAll(".JqMA-btn-blank").forEach(function(element) { element.textContent = "BF"; }); if (Drotate) { fullScreen(); } if (Dtransform) { applyClearStyle(); document.querySelectorAll(".JqMA-btn-transform").forEach(function(element) { element.style.setProperty("color", "green", "important"); }); } firstRun(); document.querySelector('html').addEventListener('touchend', function handler(event) { if (Dscroll) { Dscroll = 0; scrollRun(); } event.currentTarget.removeEventListener(event.type, handler); }); }, 200); function createStyle(_style, _id = false, _elet = 'style') { let styleElement = document.createElement(_elet); styleElement.innerHTML = _style; if (_id) { styleElement.id = _id; } return styleElement; } document.head.appendChild(createStyle(html_style + inner_style + css_style)); document.head.setAttribute("JqMA-mark-addStyle", true); let _timeTouch; function touchRun() { clearTimeout(_timeTouch); _timeTouch = setTimeout(function() { firstRun(); for (let i = 0; i < 12; i++) { setTimeout(function() { _timeTouch && clearTimeout(_timeTouch); }, i * 200); } }, 300); } function htmlTouch(event) { if (Dscroll && !pauseScroll) { let _target = event.target; if (!_target.matches(".JqMA-btn-Ju")) { scrollRun(); if (!_target.matches(".JqMA-btn-down")) { pauseScroll = true; } } } } let oNextScroll; function firstRun() { if (!document.querySelector('.JqMA-btn-all')) { addAllBtn(); } docSltAll("head:not([JqMA-mark-addStyle])").forEach(function(elet) { elet.appendChild(createStyle(css_style)); elet.setAttribute('JqMA-mark-addStyle', true); }); widthN && fontInterFn(); if (picZ) { if (scrollPic && !document.querySelector(".JqMA-inner-pic")) { setTimeout(function() { scrollPicLoad(); }, 500); } else { imgInterFn(); } } openBlank && aOpenBlank(); !Dhide && xiuTan(); document.querySelector(".JqMA-inner-word") && innerWordAdd(); if (!oNextScroll && nextScrollTop) { let element = visibleDiv(); if (element) { autoScrollTo(nextScrollTop); oNextScroll = 1; } } docSltAll("body:not(body *,[JqMA-mark-bodyFunc])").forEach(function(elet) { elet.setAttribute('JqMA-mark-bodyFunc', true); elet.addEventListener('click', function(event) { let _target = event.target; if (_target.matches("#JqMA-mark-pageNext_1,#JqMA-mark-pageNext_2")) { pageX.unshift(getScrollTop()); document.querySelector("." + _target.id).scrollIntoView(); } else if (_target.matches("a,a *")) { setTimeout(function() { if (Dscroll) { scrollRun(); pauseScroll = true; } }, 210); } else if (!_target.matches(pointEle) && _target.offsetWidth > 0.3 * window.innerWidth) { direction = event.clientY < window.innerHeight * 0.2 ? -1 : 1; autoScrollBy(direction * (widthN || Drotate ? 0.9 : 0.45) * window.innerHeight); } if (nextScrollTop) { autoScrollTo(nextScrollTop); } }); }); docSltAll("html:not(html *,[JqMA-mark-htmlFunc])").forEach(function(elet) { elet.setAttribute('JqMA-mark-htmlFunc', true); elet.addEventListener('touchstart', function(event) { htmlTouch(event); }); elet.addEventListener('touchmove', function(event) { htmlTouch(event); }); elet.addEventListener("touchend", function() { touchRun(); stopPause(); }); }); } let pauseScroll; function stopPause() { setTimeout(function() { if (pauseScroll) { pauseScroll = false; Dscroll || scrollRun(); } }, 200); } function onLongPress(element, callback, timeout = 600) { let timer = null; let touchLen = true; element.addEventListener('touchstart', function(event) { timer = setTimeout(function() { if (touchLen) { callback(event); } }, timeout); setTimeout(function() { touchLen = true; }, timeout); }); element.addEventListener('touchend', function() { clearTimeout(timer); }); element.addEventListener('touchmove', function(event) { timer && clearTimeout(timer); if (touchLen && event.touches.length > 1) { touchLen = false; } }); } function onSlideScreen(element, callback, timeout = 600) { let timer = null; element.addEventListener('touchmove', function(event) { timer && clearTimeout(timer); timer = setTimeout(function() { callback(event); }, timeout); }); } let pointEle = GM_getValue("pointEle", "textarea,input,video,button,select"); function btnScrollDivClick() { const _prot = prompt("点击不下翻元素:", pointEle); if (_prot !== null) { pointEle = _prot; GM_setValue("pointEle", pointEle); } }  document.querySelector('html').addEventListener('click', function(event) { if (event.target.classList.contains('JqMA-btn-scrollDiv')) { btnScrollDivClick(); } }); onSlideScreen(document.querySelector('html'), function(event) { if (event.target.classList.contains('JqMA-btn-scrollDiv')) { let [offsetX, offsetY, thisHeight] = getTouchSite(event.target, event); if (offsetY > thisHeight || offsetY < -thisHeight || offsetX > thisHeight) { removeShadowRoot(); } else { btnScrollDivClick(); } } }); onLongPress(document.querySelector('html'), function(event) { if (event.target.classList.contains('JqMA-btn-scrollDiv')) { location.reload(); } }); onLongPress(document, function(event) { if (pageX.length && event.touches[0].clientY > window.innerHeight * 0.8 && confirm("是否返回?")) { btnDownClick(); } }, 550); function btnDownClick() { if (pageX.length) { pageX = Array.from(new Set(pageX)); if (typeof pageX[0] === "number") { autoScrollTo(pageX[0]); } else { pageX[0].scrollIntoView({ "block": "center" }); } pageX.splice(0, 1); document.querySelectorAll(".JqMA-btn-down").forEach(function(elet) { elet.textContent = "♢"; }); } } let pageX = []; document.querySelector('html').addEventListener('click', function(event) { if (event.target.classList.contains('JqMA-btn-down')) { btnDownClick(); } }); onSlideScreen(document.querySelector('html'), function(event) { if (event.target.classList.contains('JqMA-btn-down')) { let [offsetX, offsetY, thisHeight] = getTouchSite(event.target, event); if (offsetY > thisHeight * 3) { pageX.unshift(getScrollTop()); autoScrollTo(0); document.querySelectorAll(".JqMA-btn-down").forEach(function(elet) { elet.textContent = "♢"; }); } else if (offsetY < thisHeight * -3 || offsetX > thisHeight * 3) { pageX.unshift(getScrollTop()); autoScrollTo(visibleDiv().scrollHeight); document.querySelectorAll(".JqMA-btn-down").forEach(function(elet) { elet.textContent = "♢"; }); } else if (offsetY > thisHeight) { pageNextFunc("up"); } else if (offsetY < -thisHeight || offsetX > thisHeight) { pageNextFunc("down"); } else { btnDownClick(); } } }); onLongPress(document.querySelector('html'), function(event) { if (event.target.classList.contains('JqMA-btn-down')) { let menuNum = window.prompt("1:跳转节点 2:保存位置", 1); if (menuNum === "1") { let textContent = getText(document.querySelector(".JqMA-btn-down")); let inputNum = window.prompt("跳转第几个节点:", Number(textContent) ? textContent : 0); if (Number(inputNum) || inputNum === "0") { let nextNum = Number(inputNum); pageNextFunc(nextNum); } } else if (menuNum === "2") { let inputNum = window.prompt("是否保存滚动位置?(取消关闭)", parseInt(getScrollTop())); if (inputNum === null) { nextScrollTop = 0; } else { nextScrollTop = Number(inputNum) } setValLoc("nextScrollTop", nextScrollTop); } } }); function pageNextFunc(nextNum) { pageX.unshift(getScrollTop()); let pageDom = Array.from(document.querySelectorAll(".pagetual_pageBar,.JqMA-mark-pageNext,.JqMA-inner-all,.JqMA-inner-all > :last-child,.JqMA-inner-word > p[style*=green]")); if (Number(nextNum) && nextNum >= pageDom.length) { pageDom.pop().scrollIntoView(); document.querySelectorAll(".JqMA-btn-down").forEach(function(elet) { elet.textContent = pageDom.length - 1; }); return; } if (nextNum == "up") pageDom.reverse(); for (let index = 0; index < pageDom.length; index++) { let dom = pageDom[index]; let offsetD = dom.getBoundingClientRect().top; if (nextNum == index || (nextNum == "up" && offsetD < -0.25 * window.innerHeight) || (nextNum == "down" && offsetD > 0.25 * window.innerHeight)) { dom.scrollIntoView(); document.querySelectorAll(".JqMA-btn-down").forEach(function(elet) { elet.textContent = nextNum == "up" ? pageDom.length - index - 1 : index; }); break; } } } let clearStyle = document.createElement('style'); function applyClearStyle() { clearStyle.innerHTML = `html { overflow-y: auto!important; } body { transform: translate(0%, 0%) !important; padding: 50vh 0!important; height: auto !important; max-height: none !important; } [JqMA-css-fixed_hide] { display: none !important; }`; document.head.appendChild(clearStyle); setTimeout(function() { let elements = document.querySelectorAll(':not(.JqMA-btn-all)'); for (let i = 0; i < elements.length; i++) { const _this = elements[i]; const style = window.getComputedStyle(_this); if (/sticky|fixed/.test(style.position) && _this.offsetHeight < 0.5 * window.innerHeight) { _this.setAttribute("JqMA-css-fixed_hide", "1"); } } }, 400); } let Dtransform = getValLoc("Dtransform", 0); function btnTransfClick() { Dtransform = Dtransform ? 0 : 1; document.querySelectorAll(".JqMA-btn-transform").forEach(function(elet) { elet.style.setProperty("color", Dtransform ? "green" : null, "important"); }); if (Dtransform) { applyClearStyle(); } else { document.head.removeChild(clearStyle); } setValLoc("Dtransform", Dtransform); } document.querySelector('html').addEventListener('click', function(event) { if (event.target.classList.contains('JqMA-btn-transform')) { btnTransfClick(); } }); onSlideScreen(document.querySelector('html'), function(event) { if (event.target.classList.contains('JqMA-btn-transform')) { btnTransfClick(); } }); onLongPress(document.querySelector('html'), function(event) { if (event.target.classList.contains('JqMA-btn-transform')) { alert(`O: ==点击:切换滚动对象 ==滑动:移除#shadow-root ==长按:刷新页面 W: ==点击:输入字体大小 ==滑动:上加下减 ==长按:朗读或下载文字 5: ==点击:启动/停止滚动 ==滑动:上加下减 ==长按:输入滚动速度 ♢: ==点击:回上一位置 ==短滑:上/下:下/上一节点 ==长滑:上/下:到底/顶部 ==长按:记录本域名滚动位置 X: ==点击:隐藏/显示其他按钮 ==滑动:触发 立即翻页 按钮 ==长按:自动点击下一页 T: ==点击:元素取消浮动 ==长按:显示操作清单 B: ==点击:切换a链接打开方式 ==滑动:点击2个a链接,加载页面 ==长按:横屏全屏,返回键退出 120: ==点击:开关页首图片集 ==短滑:上加下减 ==长滑:点击图片,修改过滤尺寸 ==长按:点击图片,输入替换规则 10: ==点击:点击元素,修改过滤尺寸 ==短滑:上加下减 ==长滑:滚动加载图片集 ==长按:开关深度搜索`); } }); var [picRepData, picReplace] = getDataValue("picRepData", ""); function getScrollTop() { return visibleDiv().scrollTop; } function visibleDiv(_zf = [9, -9]) { let elements = document.querySelectorAll("*"); for (let i = 0; i < elements.length; i++) { let element = elements[i]; if (element.offsetHeight > 0.6 * window.innerHeight && window.getComputedStyle(element).overflowY !== "hidden") { const oldScrollTop = element.scrollTop; for (let j = 0; j < _zf.length; j++) { element.scrollTop += _zf[j]; if (element.scrollTop !== oldScrollTop) { element.scrollTop -= _zf[j]; return element; } } } } } function xScrollDiv() { let elements = document.querySelectorAll("*"); let scrollEles = []; for (let i = 0; i < elements.length; i++) { let element = elements[i]; if (element.offsetWidth > 0.6 * window.innerWidth && window.getComputedStyle(element).overflowX !== "hidden") { const oldScrollLeft = element.scrollLeft; element.scrollLeft += 9; if (element.scrollLeft > oldScrollLeft) { element.scrollLeft -= 9; scrollEles.push(element); } } } return scrollEles; } function autoScroll(sJu, way = "by", time = 0) { let visDiv = visibleDiv(sJu > 0 ? [9] : [-9]); if (visDiv) { if (way === "by") { if (time) { let totalMoved = 0; const duration = 40; let cishu = time / duration; let distance = Math.max(sJu / cishu, duration * 0.8); const startTime = Date.now(); let _interval = setInterval(function() { visDiv.scrollTop += distance; totalMoved += distance; const currentTime = Date.now(); const elapsedTime = currentTime - startTime; if (elapsedTime >= time || totalMoved >= sJu) { clearInterval(_interval); visDiv.scrollTop += sJu - totalMoved; } }, duration); } else { visDiv.scrollTop += sJu; } } else { visDiv.scrollTop = sJu; } } } function autoScrollBy(scrollBy_Ju, speed = 0) { autoScroll(scrollBy_Ju, "by", speed); } function autoScrollTo(scrollTo_Ju, speed = 0) { let element = visibleDiv(); if (element) { if (speed === 0) { element.scrollTop = scrollTo_Ju; } else { $(element).stop().animate({ scrollTop: scrollTo_Ju }, speed, "linear"); } } } function downloadTxt(filename, textContent) { let objectURL = URL.createObjectURL(new Blob([textContent], { type: "text/plain;charset=utf-8" })); let a = document.createElement('a'); a.href = objectURL; a.download = filename; a.style.display = 'none!important'; document.body.appendChild(a); a.click(); document.body.removeChild(a); setTimeout(function() { URL.revokeObjectURL(objectURL); }, 2000); } function changeStyle(_id, _style) { docSltAll("head").forEach(function(elet) { if (!elet.querySelector("style#" + _id)) { elet.appendChild(createStyle(_style, _id)); } }); docSltAll("style#" + _id).forEach(function(elet) { if ( elet.innerHTML != _style) { elet.innerHTML = _style; } }); } let defWidthN = GM_getValue("defWidthN", 30); function fontInterFn() { changeStyle("JqMA-css-textBig", `* { font-size: ${widthN}px !important; letter-spacing: normal !important; line-height: normal !important; overflow-wrap: break-word !important; }`); } function removeTextClass() { docSltAll("style#JqMA-css-textBig").forEach(function(elet) { elet.innerHTML = ""; }); } function btnWidthClick() { let inputNum = window.prompt("请输入字体大小:(@=修改默认)", widthN ? widthN : defWidthN); if (inputNum === "@") { inputNum = window.prompt("请修改默认字体大小:", defWidthN); defWidthN = Number(inputNum) ? Number(inputNum) : 30; GM_setValue("defWidthN", defWidthN); return; } widthN = Number(inputNum) ? Number(inputNum) : 0; widthNFunc(); } function widthNFunc() { if (widthN > 0) { fontInterFn(); } else { widthN = 0; removeTextClass(); } document.querySelectorAll(".JqMA-btn-width").forEach(function(elet) { elet.textContent = widthN ? widthN : "W"; }); setValLoc("widthN", widthN); } let widthN = getValLoc("widthN", 0); document.querySelector('html').addEventListener('click', function(event) { if (event.target.classList.contains('JqMA-btn-width')) { btnWidthClick(); } }); onSlideScreen(document.querySelector('html'), function(event) { if (event.target.classList.contains('JqMA-btn-width')) { let [offsetX, offsetY, thisHeight] = getTouchSite(event.target, event); if (offsetY > 3 * thisHeight || offsetY < -3 * thisHeight || offsetX > 3 * thisHeight) { readPause(); } else if (offsetY > thisHeight) { widthN -= 1; } else if (offsetY < -thisHeight || offsetX > thisHeight) { widthN += 1; } else { btnWidthClick(); return; } widthNFunc(); } }); let speakRate = GM_getValue("speakRate", 1); function readStr() { window.speechSynthesis.cancel(); let wordP = document.querySelectorAll(".JqMA-inner-word > p"); for (let i = currentStr; i < wordP.length; i++) { let utterThis = new SpeechSynthesisUtterance(); utterThis.text = getText(wordP[i]); utterThis.rate = speakRate; utterThis.volume = 1.0; window.speechSynthesis.speak(utterThis); utterThis.onstart = function() { currentStr = i; wordP.forEach(function(element) { element.removeAttribute('style'); }); wordP[currentStr].style.cssText = "color:green!important;"; innerWordAdd(); let pLen = document.querySelectorAll(".JqMA-inner-word > p").length; if (currentStr > pLen - 9) { pageX.unshift(getScrollTop()); autoScrollBy(visibleDiv().scrollHeight, 400); setTimeout(function() { btnDownClick(); }, 500); } if (wordP.length < pLen) { readStr(); } } } } function getText(element) { return element.textContent || element.innerText; } function readPause() { try { new SpeechSynthesisUtterance(); } catch (error) { alert("浏览器不支持JS朗读!"); return; } let readbtn = document.querySelectorAll(".JqMA-inner-word > a")[1]; if (getText(readbtn) == "暂停") { readbtn.textContent = "朗读"; window.speechSynthesis.cancel(); } else { readbtn.textContent = "暂停"; readStr(); } } function innerWordAdd() { let allStr = ""; docSltAll(textSlt).forEach(function(element) { if (!element.hasAttribute('JqMA-mark-word')) { allStr += getText(element) + " "; element.setAttribute('JqMA-mark-word', true); } }); allStr = allStr.replace(/\s+/g, " "); let allStrlist = allStr.replace(/<\/?br>/g, "\n").split(/(.{1,150}(?:$|[^一-鿯0-9A-Za-z\/,,、]))/); allStrlist = allStrlist.filter((s) => { return s && s.trim(); }); for (let i = 0; i < allStrlist.length; i++) {  let endElement = document.querySelector(".JqMA-mark-wordEnd"); endElement.parentNode.insertBefore(createStyle(allStrlist[i].replace(/\n/g, '
'), false, 'p'), endElement); } } var [textSltData, textSlt] = getDataValue("textSltData", ""); let currentStr = 0; onLongPress(document.querySelector('html'), function(event) { if (event.target.classList.contains('JqMA-btn-width')) { let noFirstR; if (dqSlt(".JqMA-inner-word", "one").length) { dqSlt(".JqMA-inner-word", "all").remove(); dqSlt("[JqMA-mark-word]").removeAttr("JqMA-mark-word"); noFirstR = 1; } else { dqSlt('.JqMA-btn-width', "all").each(function() { this.style.setProperty("color", "green", "important"); }); } if (noFirstR || !textSlt.length) { waitClick("off", function(event) { let _target = event.target; while (true) { if (_target.matches("body") || getText(_target).replace(/\s+/g, "").length > 50) { break; } else { _target = _target.parentNode; } } let selector = getSelector(_target); if (noFirstR) { let inputNum = window.prompt(`修改选择器:${selector}`, textSlt.length ? textSlt : selector); if (inputNum == "所有域名") { let resultData = changeDataFunc(textSltData, ""); if (resultData)[textSltData, textSlt] = resultData; } else if (typeof inputNum === "string") { textSlt = inputNum; if (textSlt === "") { delete textSltData[locHost()]; } else { textSltData[locHost()] = textSlt; } } else if (inputNum === null) { return; } } else if (!textSlt.length) { textSlt = selector; textSltData[locHost()] = textSlt; } GM_setValue("textSltData", textSltData); appendWord(); }); } else { appendWord(); } } }); function appendWord() { let pOuter = document.createElement('p'); pOuter.className = "JqMA-inner-word JqMA-inner-all"; let pInner = document.createElement('p'); pInner.className = "JqMA-mark-wordEnd"; pInner.textContent = "!阅读结束!"; pOuter.appendChild(pInner); document.body.insertBefore(pOuter, document.body.firstChild); innerWordAdd(); document.querySelectorAll(".JqMA-inner-word > p").forEach(function(element) { element.addEventListener("click", function() { if (getText(readbtn) == "朗读") return currentStr = 0; let prevElement = this.previousElementSibling; while (prevElement) { if (prevElement.tagName.toLowerCase() === "p") { currentStr++; } prevElement = prevElement.previousElementSibling; } readStr(); }); }); let readbtn = createStyle("朗读", false, "a"); let downbtn = createStyle("下载", false, "a"); let ratebtn = createStyle(`语速:${speakRate}`, false, "a"); document.querySelectorAll(".JqMA-inner-word").forEach(function(element) { element.insertBefore(downbtn, element.firstChild); element.insertBefore(readbtn, element.firstChild); element.insertBefore(ratebtn, element.firstChild); }); readbtn.addEventListener("click", readPause); ratebtn.addEventListener("click", function() { let inputNum = window.prompt("输入语速:", speakRate); if (inputNum === null) return; speakRate = inputNum; this.textContent = "语速:" + speakRate; GM_setValue("speakRate", speakRate); if (getText(readbtn) == "朗读") return readStr(); }); downbtn.addEventListener("click", function() { downloadTxt(document.title.replace(/[\/:*?""<>|]+/g, " ").replace(/^\s+|\s+$/g, "") + ".txt", dqSlt(".JqMA-inner-word", "one").clone().children("a").remove().end().text()); }); autoScrollTo(0); } let whProp = GM_getValue("whProp", 3.9); function picSizeOut(_this, picwh_2 = null) { let natureW = _this.naturalWidth, natureH = _this.naturalHeight, _targetW = $(_this).attr("img-outerWH") ? $(_this).attr("img-outerWH") : getPercentW(_this); if (!picwh_2) { picwh_2 = picwh; } return Math.min(natureW, natureH) >= picwh_2 && natureW / natureH <= whProp && _targetW >= outerSz; } function formatStr(_url) { if (typeof _url === "string") { return _url.replace(/^\s+|\s+$/g, "").replace(/&/g, "&").replace(/\\u002F/g, "/").replace(/\\[/]/g, "/"); } else { return ""; } } function decodeStr(_url) { let newI = _url; if (/^https?%/.test(newI)) { try { newI = decodeURIComponent(newI); } catch (error) { console.log(error); } } return newI; } function delHttp(_url) { let newI = []; if (/^(?!blob:|data:).+https?[:%]/.test(_url)) { let _urlSpl = _url.split(/.(?=https?[:%])/); for (let i = 1; i < _urlSpl.length; i++) { if (!/\.html(&|$)/.test(_urlSpl[i])) { newI.push(decodeStr(_urlSpl[i].replace(/^([^?]+?)&.*$/, "$1"))); } } } return newI; } let preMatches = new Set(); const locOrigin = window.location.origin function xiuTan() { if (!document.querySelector(".JqMA-btn-hrefAll")) { const spanStyle = ".JqMA-btn-hrefSpan {margin-left: auto!important; height: 6px!important; line-height: 6px!important;color:red!important;text-align:center!important;position:static!important;}"; const hrefAllStyle = ".JqMA-btn-hrefAll {background: none!important; overflow: scroll!important; height: auto!important; max-height: calc(4vh + 4vw)!important; width: calc(15vw + 15vh)!important; bottom: 4px!important; right: 0!important;}" const hrefStyle = ".JqMA-btn-href {text-align: left!important; position: static!important; width: 100%!important;}" const spanStr = '——'; let styleElement = document.createElement('style'); styleElement.appendChild(document.createTextNode(spanStyle + hrefAllStyle + hrefStyle)); document.head.appendChild(styleElement); let pElement = document.createElement('p'); pElement.className = 'JqMA-btn-all JqMA-btn-hrefAll'; pElement.innerHTML = spanStr + spanStr; document.querySelector("html").appendChild(pElement); } let pageSource = ""; dqSlt("html").each(function() { pageSource += this.outerHTML; }); let videoList = []; document.querySelectorAll("iframe").forEach(function(elet) { let srcDomain; try { srcDomain = new URL(elet.src).origin; } catch (error) { console.log(error); } if (srcDomain && srcDomain != locOrigin) { videoList.push(elet.src); } }); dqSlt("video").each(function() { videoList.push(this.currentSrc); }); let regex = /https?[:%][^""<>\s]*?\.(avi|mp4|mov|m4v|m3u8|wmv|flv|f4v|webm)([?!/&%][^""<>\s]*?)?(?=[""<>\s一-鿯]|https?[:%]|$)/gi; let matches = pageSource.replace(/"|['']/g, '"').match(regex); if (matches) videoList.push(...matches); window.performance.getEntries().forEach(function(entry) { if (/\.(avi|m3u8|mp4|mov|m4v|wmv|flv|f4v|webm)([?!/&%]|$)/.test(entry.name)) { videoList.push(entry.name); } }); videoList = Array.from(new Set(videoList)); var newI, newMatches = []; for (let i = 0; i < videoList.length; i++) { newI = formatStr(videoList[i]); if (!newI.replace(/[\s/]/g, "").length || /^(?!https?:)[a-z]{3,15}:/.test(newI)) continue; newMatches.push(newI); let delHtList = delHttp(newI); if (delHtList.length) newMatches.push(...delHtList); } for (let i = 0; i < newMatches.length; i++) { newI = addLocation(decodeStr(newMatches[i])); if (preMatches.has(newI)) continue; preMatches.add(newI); dqSlt(".JqMA-btn-hrefAll span", "one").after($("").attr({ href: newI, class: "JqMA-btn-all JqMA-btn-href" }).text(newI.replace(/\/(?=$|\?)/g, "").replace(/^[^?]*[/]/, "").replace(/(?<=[^?/.]{9})[^?/.]+/, ""))); } } function getMinPicwh(_this) { return Math.min(_this.naturalWidth, _this.naturalHeight); } function getPercentW(_this) { return parseInt(_this.offsetWidth / window.innerWidth * 100); } function waitClick(offClick, afterFunc) { dqSlt(".JqMA-btn-all", "all").each(function() { this.style.setProperty("display", "none", "important"); }); setTimeout(function() { dqSlt("body:not(body *)").on("click.tempClickFunc", function(event) { event.preventDefault(); if (offClick === "off") { dqSlt("body").off("click.tempClickFunc"); dqSlt(".JqMA-btn-all", "all").each(function() { this.style.setProperty("display", "block", "important"); }); } afterFunc(event); }); }, 100); } function btnOuterSzClick() { waitClick("off", function(event) { let _this = $(event.target); let _targetW = _this.attr("img-outerWH") ? _this.attr("img-outerWH") : getPercentW(event.target); let inputNum = window.prompt("请输入过滤尺寸:", _targetW - 5); if (Number(inputNum) || inputNum === "0") { outerSz = Number(inputNum); if (outerSz < minOuterSz) outerSz = minOuterSz; outerSz_run(); } }); } document.querySelector('html').addEventListener('click', function(event) { if (event.target.classList.contains('JqMA-btn-outerSz')) { btnOuterSzClick(); } }); onSlideScreen(document.querySelector('html'), function(event) { if (event.target.classList.contains('JqMA-btn-outerSz')) { let [offsetX, offsetY, thisHeight] = getTouchSite(event.target, event); if (offsetY > thisHeight * 3 || offsetY < thisHeight * -3 || offsetX > thisHeight * 3) { scrollPic = confirm("是否滚动加载图片?"); setValLoc("scrollPic", scrollPic); scrollPic && scrollPicLoad(); } else if (offsetY > thisHeight) { if (minOuterSz < outerSz && outerSz < minOuterSz + 10) { outerSz = minOuterSz; } else if (outerSz <= 1) { outerSz = 0; } else if (outerSz <= minOuterSz) { outerSz = 1; } else { outerSz -= 10; } } else if (offsetY < -thisHeight || offsetX > thisHeight) { if (outerSz === 0) { outerSz = 1; } else if (outerSz === 1) { outerSz = minOuterSz; } else { outerSz += 10; } } else { btnOuterSzClick(); } outerSz_run(); } }); function outerSz_run() { if (outerSz < 0) outerSz = 0; if (picZ) { if (outerSz === 0) { let _scrollTop = getScrollTop(); removePicClass(); imgInterFn(); setTimeout(function() { autoScrollTo(_scrollTop); }, 400); } else { picImgFilter(); } } if (widthN) { removeTextClass(); fontInterFn(); } dqSlt(".JqMA-btn-outerSz", "all").text(outerSz); setValLoc("outerSz", outerSz); } onLongPress(document.querySelector('html'), function(event) { if (event.target.classList.contains('JqMA-btn-pic')) { waitClick("off", function(event) { if (event.target.currentSrc && window.confirm("是否复制图片链接?")) copyToClipboard(event.target.currentSrc); setTimeout(function() { var inputNum = window.prompt("请输入图片链接替换(`分隔,@开头:正则且数字->[0-9]):", picReplace); if (inputNum == "所有域名") { var resultData = changeDataFunc(picRepData, ""); if (resultData)[picRepData, picReplace] = resultData; } else if (typeof inputNum === "string") { picReplace = inputNum; if (picReplace === "") { delete picRepData[locHost()]; } else { picRepData[locHost()] = picReplace; if (picZ) { var _scrollTop = getScrollTop(); removePicClass(); imgInterFn(); setTimeout(function() { autoScrollTo(_scrollTop); }, 400); } } } GM_setValue("picRepData", picRepData); }, 200); }); } }); function btnPicwhClick() { waitClick("off", function(event) { let _picwh = event.target.matches("img") ? getMinPicwh(event.target) + 20 : minPicwh, inputNum = window.prompt("请输入 过滤尺寸:(@ = 修改默认)", _picwh); if (/^\d+$/.test(inputNum)) { picwh = Number(inputNum); if (picwh < minPicwh) picwh = minPicwh; picImgFilter(); } else if (inputNum === "@") { let _whProp = parseInt(event.target.naturalWidth / event.target.naturalHeight * 10) / 10, _targetW = $(event.target).attr("img-outerWH") ? $(event.target).attr("img-outerWH") : getPercentW(event.target); inputNum = window.prompt(`请输入 过滤宽高比,最小过滤尺寸,最小过滤宽度,最大转高清尺寸:(点击元素:${_whProp},${getMinPicwh(event.target)},${_targetW} 推荐:3.9,100,10,500)`, [whProp, minPicwh, minOuterSz, minPicHD]); if (/^[\d.,]+$/.test(inputNum)) { whProp = Number(inputNum.split(",")[0]); minPicwh = Number(inputNum.split(",")[1]); minOuterSz = Number(inputNum.split(",")[2]); minPicHD = Number(inputNum.split(",")[3]); picImgFilter(); GM_setValue("whProp", whProp); GM_setValue("minPicwh", minPicwh); GM_setValue("minOuterSz", minOuterSz); GM_setValue("minPicHD", minPicHD); } } }); } onLongPress(document.querySelector('html'), function(event) { if (event.target.classList.contains('JqMA-btn-outerSz')) { DSImg = DSImg ? 0 : 1; dqSlt(".JqMA-btn-outerSz", "all").each(function() { this.style.setProperty("color", DSImg ? "green" : null, "important"); }); if (picZ) { var _scrollTop = getScrollTop(); removePicClass(); imgInterFn(); setTimeout(function() { autoScrollTo(_scrollTop); }, 400); } if (DSImg) { delete DSImgData[locHost()]; } else { DSImgData[locHost()] = DSImg; } GM_setValue("DSImgData", DSImgData); } }); function picImgFilter() { if (picwh < 0) picwh = 0; if (picZ) { dqSlt(".JqMA-inner-pic > a", "all").addClass("JqMA-css-smallPic"); dqSlt(".JqMA-inner-pic .JqMA-mark-imgLoaded", "all").each(function() { if (picSizeOut(this)) { $(this).nextAll("a:lt(2)").add(this).removeClass("JqMA-css-smallPic"); } else { $(this).addClass("JqMA-css-smallPic"); } }); } dqSlt(".JqMA-btn-pic", "all").text(picwh); setValLoc("picwh", picwh); } function btnPicClick() { picZ = picZ ? 0 : 1; dqSlt(".JqMA-btn-pic", "all").each(function() { this.style.setProperty("color", picZ ? "green" : null, "important"); }); setValLoc("picZ", picZ); if (picZ) { if (scrollPic) { scrollPicLoad(); } else { imgInterFn(); } } else { removePicClass(); } } let scrollPic = getValLoc("scrollPic", 0) function scrollPicLoad() { const _scrollTop = getScrollTop(); const _picZ = picZ; picZ = 0; dqSlt(".JqMA-inner-pic", "all").remove(); autoScrollTo(0); const maxTop = visibleDiv().scrollHeight; autoScrollBy(maxTop, 900); setTimeout(function() { xScrollDiv().forEach(function(elet){ elet.scrollLeft = 10 * window.innerWidth }); autoScrollTo(0, 200); setTimeout(function() { if (_picZ) { picZ = 1; removePicClass(); imgInterFn(); } setTimeout(function() { autoScrollTo(_scrollTop); }, 400); }, 400); }, 1000); } let picZ = getValLoc("picZ", 0); document.querySelector('html').addEventListener('click', function(event) { if (event.target.classList.contains('JqMA-btn-pic')) { btnPicClick(); } }); onSlideScreen(document.querySelector('html'), function(event) { if (event.target.classList.contains('JqMA-btn-pic')) { let [offsetX, offsetY, thisHeight] = getTouchSite(event.target, event); if (offsetY > thisHeight * 3 || offsetY < thisHeight * -3 || offsetX > thisHeight * 3) { btnPicwhClick(); } else if (offsetY > thisHeight) { if (minPicwh < picwh && picwh < minPicwh + 40) { picwh = minPicwh; } else if (picwh <= minPicwh) { picwh = 0 } else { picwh -= 40; } picImgFilter(); } else if (offsetY < -thisHeight || offsetX > thisHeight) { if (picwh == 0) { picwh = minPicwh; } else { picwh += 40; } picImgFilter(); } else { btnPicClick(); } } }); function removePicClass() { dqSlt(".JqMA-inner-pic", "all").remove(); preImgArr = [new Set(), new Set(), new Set()]; } function addLocation(_href) { try { return new URL(_href, window.location.origin).href; } catch (error) { return _href; } } function getImgList(dataObj, _this, findA, preImgNum) { let imgList = [], imgOuterWH; dataObj.forEach(function(i) { i = formatStr(i); if (!i.replace(/[\s/]/g, "").length) return; i = addLocation(decodeStr(i)); if (!preImgArr[preImgNum].has(i)) { preImgArr[preImgNum].add(i); imgOuterWH = _this ? getPercentW(_this) : minOuterSz; let newImg = $("").attr({ src: i, loading: "lazy", width: "300", height: "100", "img-outerWH": imgOuterWH }); onLongPress(newImg[0], function() { if (confirm("是否滚动到图片位置?")) { pageX.unshift(newImg[0]); _this.scrollIntoView({ "block": "center" }); } }); imgList.push(newImg); } }); if (findA && imgList.length) { let _newA = $(aStr), _a = $(_this).closest("a"), _img_2 = $(_this); for (let i = 0; i < 3; i++) { if (_a.length || _img_2[0].matches("body")) break; _a = _img_2.find("a[href]:first"); _img_2 = _img_2.parent(); } const _href = _a.attr("href"); if (_href && !/^(?!https?:)[a-z]{4,15}:|^#/.test(_href)) { _newA.attr({ href: _href, target: _a.attr("target") }); } else { if (_a.length) { _a.children(":not(a)").length || _a.append('

'); _a = _a.children(":not(a):first"); } else { _a = $(_this); } _newA.on("click", function() { _a.trigger("click"); }); } let _newA2 = $(aStr).on("click", function() { pageX.unshift($(this).prevAll("img:first")[0]); _this.scrollIntoView({ "block": "center" }); }); imgList.push(_newA); imgList.push(_newA2.text(imgOuterWH)); } return imgList; } var preImgArr = [new Set(), new Set(), new Set()]; var imgRegex_1 = /https?[:%][^""<>\s]*?\.(xbm|tif|pjp|jpg|jpeg|tiff|gif|jfif|webp|png|bmp|pjpeg|avif)([?!/&%][^""<>\s]*?)?(?=[""<>\s一-鿯]|https?[:%]|$)/gi var imgRegex_2 = /((?<=[""])[a-z]*[/]|https?[:%])[^""<>\s]*?\.(xbm|tif|pjp|jpg|jpeg|tiff|gif|jfif|webp|png|bmp|pjpeg|avif)([?!/&%][^""<>\s]*?)?(?=[""<>\s]|https?[:%]|$)/i let pageNext_0, pageNext_1, pageNext_2; const aStr = ''; function imgInterFn() { picaImgHide(); if (!dqSlt(".JqMA-inner-pic", "one").length) { dqSlt("body", "one").prepend($("

").attr({ class: "JqMA-inner-pic JqMA-inner-all" }).append('

可见元素

') .append('

深度搜索

') .append('

文字链接

')); } pageNext_0 = dqSlt(".JqMA-mark-pageNext_0", "one"); pageNext_1 = dqSlt(".JqMA-mark-pageNext_1", "one"); pageNext_2 = dqSlt(".JqMA-mark-pageNext_2", "one"); let imgArr_0 = [], imgArr_1 = []; dqSlt("*").each(function() { if (this.classList.contains("pagetual_pageBar")) { !pageNext_1.prev().hasClass("JqMA-mark-pageNext") && pageNext_1.before($('

')); DSImg && !pageNext_2.prev().hasClass("JqMA-mark-pageNext") && pageNext_2.before($('

')); return true; } let srcArr = []; if (this.matches("img:not(.JqMA-inner-pic > *)")) { srcArr.push(this.currentSrc); } else if (this.matches("video")) { srcArr.push(this.poster); } const backImg = window.getComputedStyle(this).backgroundImage.split('"');  if (backImg.length > 1) { srcArr.push(backImg[1]); } if (srcArr.length && (outerSz === 0 || getPercentW(this) >= 1)) { let imgList = getImgList(srcArr, this, true, 0); if (imgList.length) imgArr_0.push(...imgList); if (DSImg) { let _imgHtml = ""; let closA = this.closest('a'); if (closA) _imgHtml = $(closA).clone().removeAttr("style").empty().prop("outerHTML"); _imgHtml += $(this).clone().removeAttr("src poster style").empty().prop("outerHTML"); let _isp = _imgHtml.replace(/"|['']/g, '"').match(imgRegex_2); if (_isp) { imgList = getImgList([_isp[0]], this, true, 1); if (imgList.length) imgArr_1.push(...imgList); } } } }); imgArr_0.length && pageNext_1.before(imgArr_0); imgArr_1.length && pageNext_2.before(imgArr_1); if (DSImg) { let _text = ""; dqSlt("body > *").each(function() { _text += $(this).clone().find("style,script,noscript").remove().end().text(); }); _text = _text.replace(/"|['']/g, '"').match(imgRegex_1); if (_text) { _text = getImgList(_text, false, false, 2); _text.length && dqSlt(".JqMA-inner-pic", "one").append(_text); } } picImgCount(pageNext_0, pageNext_1, pageNext_2); dqSlt(".JqMA-inner-pic img:not(.JqMA-mark-preAdd)").addClass("JqMA-mark-preAdd").on("load error", function() { picImgCount(pageNext_0, pageNext_1, pageNext_2); var oldNatureH = this.naturalHeight, oldNatureW = this.naturalWidth; if (Math.min(oldNatureW, oldNatureH) < minPicHD) { var thisSrcList = picHD(this.currentSrc), _this = $(this), promiseArray = []; for (let i = 0; i < thisSrcList.length; i++) { promiseArray.push(checkImgExists(thisSrcList[i]).catch(err => { console.log(err) })); } Promise.all(promiseArray).then(function(data) { for (let i = 0; i < data.length; i++) { let resH = data[i]; if (resH.naturalHeight > oldNatureH || resH.naturalWidth > oldNatureW) { _this.attr({ src: resH.src, "JqMA-mark-imgHD": 1 }); return; } } }); } if (picSizeOut(this)) { $(this).nextAll("a:lt(2)").add(this).removeClass("JqMA-css-smallPic"); } else { $(this).addClass("JqMA-css-smallPic"); } }).on("load", function() { $(this).addClass("JqMA-mark-imgLoaded").nextAll("a:eq(0)").text(getMinPicwh(this)); }); } var picImgTime; function picImgCount(pageNext_0, pageNext_1, pageNext_2) { clearTimeout(picImgTime); picImgTime = setTimeout(function() { let picImgLen = dqSlt(".JqMA-inner-pic img:not(.JqMA-css-smallPic)", "all").length, keJian_Img = pageNext_1.prevAll("img:not(.JqMA-css-smallPic)"), search_len = pageNext_2.prevAll("img:not(.JqMA-css-smallPic)").length; pageNext_0.html(`可见:${keJian_Img.length} 深度:${search_len - keJian_Img.length} 文字:${picImgLen - search_len}`); }, 400); } function picHD(oldSrc) { var thisSrc = oldSrc, thisSrcList = []; if (picReplace.indexOf("`") != -1) { let numberToRe = /^@/.test(picReplace) ? 1 : 0, picRepArr = picReplace.replace(/^@/, "").split("`"); for (let i = 0; i < parseInt(picRepArr.length / 2); i++) { thisSrc = thisSrc.replace(numberToRe ? new RegExp(picRepArr[2 * i].replace(/(?;]+$/, "$1")); let delHtList = delHttp(oldSrc); if (delHtList.length) thisSrcList.push(...delHtList); if (!/.https?[:%]/.test(oldSrc)) { thisSrcList.push(oldSrc.replace(/^([^?]+?)&.*$/, "$1")); } var newSrcList = []; for (let i = 0; i < thisSrcList.length; i++) { thisSrc = thisSrcList[i]; if (thisSrc != oldSrc) { newSrcList.push(thisSrc); } } return newSrcList; } function picaImgHide() { if (Dhide) { changeStyle("JqMA-inner-picaImg", ".JqMA-inner-pic > a {" + "height: 0!important; border: 0!important;}" + ".JqMA-inner-pic > img.JqMA-css-smallPic {" + "height: 0!important; border: 4px solid gray!important;}"); } else { dqSlt("style#JqMA-inner-picaImg").html(""); } } function delHide() { dqSlt(".JqMA-btn-all", "all").each(function() { if (this.matches(".JqMA-btn-del")) { this.style.cssText += "opacity:" + (Dhide ? "0.5" : "1") + "!important;"; } else { this.style.cssText += "display:" + (Dhide ? "none" : "block") + "!important;"; } }); } function btnDelClick() { Dhide = Dhide ? 0 : 1; delHide(); picaImgHide(); setValLoc("Dhide", Dhide); } document.querySelector('html').addEventListener('click', function(event) { if (event.target.classList.contains('JqMA-btn-del')) { btnDelClick(); } }); onSlideScreen(document.querySelector('html'), function(event) { if (event.target.classList.contains('JqMA-btn-del')) { let [offsetX, offsetY, thisHeight] = getTouchSite(event.target, event); if (offsetX > thisHeight || offsetY > thisHeight || offsetY < -thisHeight) { let loadNow = document.querySelector("#pagetual-sideController #loadNow"); if (loadNow) { loadNow.dispatchEvent(new MouseEvent('click')); } else { alert("请启用 东方永夜机 立即翻页"); } } else { btnDelClick(); } } }); let nextScrollTop = getValLoc("nextScrollTop", 0); onLongPress(document.querySelector('html'), function(event) { if (event.target.classList.contains('JqMA-btn-del')) { let newHref; if (/[^a-z]page[=/]\d+(?=$|&)/.test(location.href)) { let hrefSplit = location.href.split(/(?<=[^a-z]page)([=/])(?=\d)/); openHref(getNextPage(hrefSplit)); return; } else if (/[/_\-]\d+(\.html)?$/.test(location.href)) { let hrefSplit = location.href.split(/([/_\-])(?=\d+(?:\.html)?$)/); newHref = getNextPage(hrefSplit); } let pageEnter; $(dqSlt("a").get().reverse()).each(function() { if (/^\s*2\s*$/.test($(this).text()) && /[^a-z]page[=/]\d+(?=$|&)/.test(this.href)) { pageEnter = 1; openHref(this.href); return false; } else if (/^\s*(>|次のページ|下.?[章页]|下[一—].)\s*$|^\s*next\s*(page\s*)?$/i.test($(this).text())) { pageEnter = 1; let _a = $(this); _a.children(":not(a)").length || _a.append('

'); _a.children(":not(a):first").trigger("click"); return false; } else if (newHref && this.href === newHref) { pageEnter = 1; openHref(newHref); return false; } }); if (!pageEnter && /[^a-z\d]\d+$/.test(location.href)) { let hrefSplit = location.href.split(/([^a-z\d])(?=\d+$)/); openHref(getNextPage(hrefSplit)); } } }); function getNextPage(hrefSplit) { let pNumber = Number(hrefSplit[2].split(/[^\d]/)[0]) + 1; let newHref = hrefSplit[0] + hrefSplit[1] + pNumber + hrefSplit[2].replace(/^\d+/, ""); return newHref; } function openHref(newHref) { if (openBlank) { window.open(newHref); } else { location.href = newHref; } } function aOpenBlank() { dqSlt("a:not([JqMA-mark-blank])").attr("JqMA-mark-blank", 1).filter(function() { return !/^(?!https?:)[a-z]{4,15}:|^#/.test(this.href); }).attr("target", "_blank"); } function btnBlankClick() { openBlank = openBlank ? 0 : 1; dqSlt(".JqMA-btn-blank", "all").each(function() { this.style.setProperty("color", openBlank ? "green" : null, "important"); }); if (openBlank) { aOpenBlank(); } else { dqSlt("[JqMA-mark-blank]").removeAttr("JqMA-mark-blank").attr("target", null); } setValLoc("openBlank", openBlank); } let openBlank = getValLoc("openBlank", 0), preIframes = new Set(); document.querySelector('html').addEventListener('click', function(event) { if (event.target.classList.contains('JqMA-btn-blank')) { btnBlankClick(); } }); onSlideScreen(document.querySelector('html'), function(event) { if (event.target.classList.contains('JqMA-btn-blank')) { let [offsetX, offsetY, thisHeight] = getTouchSite(event.target, event); if (offsetY > thisHeight || offsetY < -thisHeight || offsetX > thisHeight) { let firstTarget; waitClick("not", function(event) { if (!firstTarget) { firstTarget = event.target; return; } dqSlt("body").off("click.tempClickFunc"); dqSlt(".JqMA-btn-all", "all").each(function() { this.style.setProperty("display", "block", "important"); }); let isInput = $(firstTarget).closest("a").length ? 0 : 1, first_aCss; if (firstTarget === event.target) copyToClipboard(getSelector(event.target)); firstTarget = $(firstTarget).closest(isInput ? "input" : "a"); let lastTarget = $(event.target).closest(isInput ? "input" : "a"); if (firstTarget.length && lastTarget.length) { dqSlt(isInput ? "input" : "a").each(function() { if (this === firstTarget[0]) first_aCss = 1; if (first_aCss && this.href && !preIframes.has(this.href)) { preIframes.add(this.href); dqSlt("body", "one").append($("