您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
A script that helps you browse ehentai more conveniently.
当前为
// ==UserScript== // @name ExHentai Viewer // @namespace Violentmonkey Scripts // @description A script that helps you browse ehentai more conveniently. // @match *://exhentai.org/* // @match *://e-hentai.org/* // @grant GM_setValue // @grant GM_getValue // @version 0.25 // ==/UserScript== var custom_filter = GM_getValue('custom_filter', []); custom_filter.forEach(function(v, i, a){ if (v.tag == undefined || v.name == undefined){ delete a[i]; GM_setValue('custom_filter', custom_filter); } }) if (window.location.href.includes("/s/")) { EhViewer(); } else if (window.location.href.includes("/g/")) { addToTag(); } else if (document.getElementById('searchbox') !== null) { AddFilter(); } function addToTag(){ var tb = document.getElementById('taglist').firstElementChild.firstElementChild; tb.innerHTML += '<tr><td class="tc">addTag:</td><td><div id="addTag" class="gt" style="cursor:pointer">+</div></td></tr>'; var bt = document.getElementById('addTag'); bt.addEventListener('click', newTag, false); function newTag(){ var tagStr = window.prompt("Add filter like format below:", "name@value"); if(tagStr!==null){ tagStr = tagStr.split("@"); custom_filter.push({'name':tagStr[0], 'tag':tagStr[1]}); GM_setValue('custom_filter', custom_filter); } } } function AddFilter(){ var ipColor1; var ipColor2; var fontColor; if (window.location.host === 'e-hentai.org'){ ipColor1 = 0xedeada; ipColor2 = ipColor1 - 0x202020; } else { ipColor1 = 0x34353b; ipColor2 = ipColor1 + 0x202020; } ipColor1 = '#' + ipColor1.toString('16'); ipColor2 = '#' + ipColor2.toString('16'); var form = document.getElementsByTagName('form')[0]; var search_box = document.getElementsByClassName("nopm")[0].firstElementChild; var p = document.getElementById('custom_filter'); if(p === null) { form.insertBefore(document.createElement('br'), form.children[2]); p = form.insertBefore(document.createElement('p'), form.children[3]); form.insertBefore(document.createElement('br'), form.children[4]); p.setAttribute('class', 'nopm'); p.setAttribute('id', 'custom_filter'); } else { p.innerHTML = ''; } for (var i in custom_filter) { var filter = custom_filter[i]; var t = p.appendChild(document.createElement('input')); t.setAttribute('type', 'button'); t.setAttribute('value', filter.name); t.setAttribute('tag', filter.tag); t.addEventListener('click', addTag, false); t.addEventListener('contextmenu', delTag, false); if (search_box.value.includes(filter.tag)){ t.style.backgroundColor=ipColor2; } else { t.style.backgroundColor=ipColor1; } } t=p.appendChild(document.createElement('input')); t.setAttribute('type', 'button'); t.setAttribute('value', "+"); t.addEventListener('click', newTag, false); function addTag(e){ var t = e.target; var tag = t.getAttribute('tag'); if (search_box.value.includes(tag)){ search_box.value = search_box.value.replace(('"'+tag+'"'), ""); t.style.backgroundColor=ipColor1; } else { search_box.value += ('"'+tag+'"'); t.style.backgroundColor=ipColor2; } } function newTag(){ var tagStr = window.prompt("Add filter like format below", "name@value").split("@"); if(tagStr.length == 2){ custom_filter.push({'name':tagStr[0], 'tag':tagStr[1]}); GM_setValue('custom_filter', custom_filter); AddFilter(); } else { window.alert("Invalid value... :("); } } function delTag(e){ e.preventDefault(); if (window.confirm('Delete this tag?') == true){ var t = e.target; var tag = t.getAttribute('tag'); for (var i in custom_filter) { if(custom_filter[i].tag == tag){ delete custom_filter[i]; break; } } GM_setValue('custom_filter', custom_filter); AddFilter(); } return false; } } function EhViewer(){ var zoomInterval; var oldSi = si; var firstPage = document.getElementsByClassName("sn")[0].firstChild.href; var lastPage = document.getElementsByClassName("sn")[0].lastChild.href; var float_icon = new Array([]); var float_link = new Array([]); var currentScale = 1; var float_list = document.createElement("ul"); var newStyle = 'h1, #i2, #i5, #i6, #i7, .ip, .sn{display:none!important;}.float_list{display:block; position:fixed; bottom:10px; right:10px; list-style:none;z-index:1005;}.float_icon{user-select:none;background-color:btColor1; margin:5px; width:50px; height:50px; line-height:50px; font-size:12px; border-radius:50%; cursor:pointer;}.float_icon:hover{transition-duration:0.2s;font-size:13px; background-color:btColor2; box-shadow:0 0 2px 1px shadowColor;}.float_icon:active{transition-duration:0.2s;font-size:12px; }::-webkit-scrollbar{display:none;}'; var btColor1; var btColor2; var shadowColor; if (window.location.host === 'e-hentai.org'){ btColor1 = 0xe3e0d1 - 0x101010; btColor2 = btColor1 - 0x050505; shadowColor = btColor1 + 0x050505; } else { btColor1 = 0x34353b + 0x101010; btColor2 = btColor1 + 0x050505; shadowColor = btColor1 - 0x050505; } newStyle = newStyle.replace('btColor1', '#'+btColor1.toString('16')); newStyle = newStyle.replace('btColor2', '#'+btColor2.toString('16')); newStyle = newStyle.replace('shadowColor', '#'+shadowColor.toString('16')); document.body.appendChild(float_list); for(var i=0; i<5; i++){ float_icon[i]=document.createElement("li"); float_link[i]=document.createElement("a"); float_list.appendChild(float_icon[i]); float_icon[i].appendChild(float_link[i]); } float_list.setAttribute("class", "float_list"); float_icon[0].setAttribute("class", "float_icon prev_page"); float_icon[1].setAttribute("class", "float_icon next_page"); float_icon[2].setAttribute("class", "float_icon zoom_in"); float_icon[3].setAttribute("class", "float_icon zoom_out"); float_icon[4].setAttribute("class", "float_icon gallery"); float_icon[0].innerText="➕"; float_icon[1].innerText="➖"; float_icon[2].innerText="👈"; float_icon[3].innerText="👉"; float_icon[4].innerText="📚"; document.addEventListener("keydown", keyDown); float_icon[0].addEventListener('mousedown', zoomIn, false); float_icon[1].addEventListener('mousedown', zoomOut, false); float_icon[2].addEventListener('click', prevPage, false); float_icon[3].addEventListener('click', nextPage, false); document.addEventListener('mouseup', function(){clearInterval(zoomInterval);}); float_icon[4].setAttribute("onclick", "window.open(document.getElementsByClassName('sb')[0].firstChild.href,'_self');"); function keyDown(e) { var keycode = e.which; switch(keycode){ case 37: { setNewPage(); break; } case 39: { setNewPage(); break; } case 187: { setScale("zoomIn"); break; } case 189: { setScale("zoomOut"); break; } case 188: { window.scrollBy(0, -window.innerHeight); break; } case 190: { window.scrollBy(0, window.innerHeight); break; } case 219: { window.scrollBy(0, -window.innerHeight*0.3); break; } case 221: { window.scrollBy(0, window.innerHeight*0.3); break; } default: { // console.log(keycode); } } } function setNewPage() { var listenChange = setInterval(function(){ if(oldSi != si){ var pic = document.getElementById("img"); var width = Number(pic.style.width.replace("px", "")); var height = Number(pic.style.height.replace("px", "")); var page = document.getElementsByTagName('span'); var footMark = document.getElementById('i4').firstChild; var currentPage = page[0].innerText; var totalPage = page[1].innerText; footMark.innerText = currentPage +"P / "+ totalPage +"P :: "+ footMark.innerText; width *= currentScale; height *= currentScale; pic.style.width = width + "px"; pic.style.height = height + "px"; oldSi = si; clearInterval(listenChange); } }, 200); } function setScale(scale){ var pic = document.getElementById("img"); var width = Number(pic.style.width.replace("px", "")); var height = Number(pic.style.height.replace("px", "")); // console.log(pic.src, width, height, max_width); switch(scale){ case 'zoomIn': { var max_width = Number(pic.style.maxWidth.replace("px", "")); if (width < max_width){ width *= 1.1; height *= 1.1; currentScale *= 1.1; } else{ } break; } case 'zoomOut': { if (height >= window.innerHeight){ width /= 1.1; height /= 1.1; currentScale /= 1.1; } else { } break; } } pic.style.width = width + "px"; pic.style.height = height + "px"; } function prevPage(e){ e.preventDefault(); if (window.location.href !== firstPage){ document.getElementById('prev').onclick(); } else { window.alert("The first page (⊙_⊙)") } setNewPage(); } function nextPage(e){ e.preventDefault(); if (window.location.href !== lastPage){ document.getElementById('next').onclick(); } else { window.alert("The last page (⊙ω⊙)") } setNewPage(); } function zoomIn(e){ e.preventDefault(); setScale('zoomIn'); zoomInterval = setInterval(function(){ setScale('zoomIn'); }, 200); } function zoomOut(e){ e.preventDefault(); setScale('zoomOut'); zoomInterval = setInterval(function(){ setScale('zoomOut'); }, 200); } function addNewStyle(newStyle) { var styleElement = document.getElementById('styles_js'); if (!styleElement) { styleElement = document.createElement('style'); styleElement.type = 'text/css'; styleElement.id = 'styles_js'; document.getElementsByTagName('head')[0].appendChild(styleElement); styleElement.appendChild(document.createTextNode(newStyle)); } else { styleElement.innerText = newStyle; } } addNewStyle(newStyle); }