您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
JavDB 工具箱:1. 添加搜索在线观看资源按钮 2. 添加到 JavLibrary 等站点跳转按钮 3. 过滤肛交标签中的M男和扶她(未来会添加自定义);4. 增加免梯子访问JavLibrary;推荐结合 `JavDB 添加跳转在线观看` 食用。此脚本为naughtyEvenstar创作,版权属原作者所有,感谢其作品。本人只是增加了免梯子网址访问JavLibrary自用,如有兴趣者可自行下载。
当前为
// ==UserScript== // @name JavDB Toolbox(Revise) // @namespace http://tampermonkey.net/ // @version 0.2.0 // @description JavDB 工具箱:1. 添加搜索在线观看资源按钮 2. 添加到 JavLibrary 等站点跳转按钮 3. 过滤肛交标签中的M男和扶她(未来会添加自定义);4. 增加免梯子访问JavLibrary;推荐结合 `JavDB 添加跳转在线观看` 食用。此脚本为naughtyEvenstar创作,版权属原作者所有,感谢其作品。本人只是增加了免梯子网址访问JavLibrary自用,如有兴趣者可自行下载。 // @author testqdg // @match https://javdb.com/* // @include /^https:\/\/(\w*\.)?javdb(\d)*\.com.*$/ // @icon https://javdb.com/favicon-32x32.png // @grant none // @license MIT // ==/UserScript== (function () { "use strict"; const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); const openWindowWithPost = (url, data) => { var form = document.createElement("form"); form.target = "_blank"; form.method = "POST"; form.action = url; form.style.display = "none"; for (var key in data) { var input = document.createElement("input"); input.type = "hidden"; input.name = key; input.value = data[key]; form.appendChild(input); } document.body.appendChild(form); form.submit(); document.body.removeChild(form); }; const { pathname, search } = location; if (pathname.startsWith("/v/")) { const tmpl = ` <div class="panel-block generated"> <div class="columns"> <div class="column"> <div class="buttons are-small review-buttons" /> </div> </div> </div>`; [...document.querySelectorAll(".movie-panel-info div.panel-block")] .pop() .insertAdjacentHTML("afterend", tmpl); const buttonRowEle = document.querySelector(".generated .review-buttons"); const registerButton = (text, onClick, hint) => { const btnEle = document.createElement("a"); btnEle.className = "button is-info is-outlined"; btnEle.addEventListener("click", onClick); btnEle.textContent = text; buttonRowEle.appendChild(btnEle); if (hint) btnEle.title = hint; return btnEle; }; const movieCode = document.querySelector( ".panel-block.first-block > span" ).textContent; const movieTitle = document.querySelector( ".title.is-4 > strong" ).textContent; const isFC2 = movieCode.startsWith("FC2"); const isUncensored = isFC2 || movieTitle.includes("無碼"); const searchType = isUncensored ? "uncensored" : "censored"; const searchKeyword = isFC2 ? movieCode.slice(4) : movieCode; const btn7mmtv = registerButton( "🔎 7MMTV", () => { openWindowWithPost( "https://7mmtv.tv/zh/searchform_search/all/index.html", { search_keyword: searchKeyword, search_type: searchType, op: "search", } ); }, "适合搜索骑兵和fc2" ); const btnAvgle = registerButton("🔎 Avgle", () => window.open( `https://avgle.com/search/videos?search_query=${searchKeyword}&search_type=videos` ) ); const btnJavBigo = registerButton("🔎 JavBigo", () => window.open(`https://javbigo.com/?s=${searchKeyword}`) ); const btnJavLib = registerButton("🔎 JavLibrary", () => window.open( `https://www.javlibrary.com/cn/vl_searchbyid.php?keyword=${searchKeyword}` ) ); const btnJavLib1 = registerButton("🔎 JavLibNoproxy", () => window.open( `https://www.o58c.com/cn/vl_searchbyid.php?keyword=${searchKeyword}` ) ); } else if (pathname.startsWith("/tags")) { if (search.includes(`c5=74`) /* 肛交 */) { console.log("tags: anal detected"); const blockedKeywords = ["男の娘", "雄母", "女装", "前立腺", "M男"]; const blockedTags = [ "c1=63", // M男 "c1=277", // 男同性恋 "c3=192", // 女装人妖 "c4=147", // 变性者 ]; setTimeout(async () => { const items = [...document.querySelectorAll(`.grid-item.column`)]; for (const item of items) { const a = item.children[0]; const { href, title } = a; let shouldBlock = false; if (blockedKeywords.some((keyword) => !!title.match(keyword))) { shouldBlock = true; } else { const resp = await fetch(href); const text = await resp.text(); const tags = new Set(text.match(/(?!tags\?)c\d=\d+/g)); shouldBlock = blockedTags.some((tag) => tags.has(tag)); } if (shouldBlock) { console.log(`blocked`, title, href); const children = [...a.children]; children.forEach((ele) => { if (ele.classList.contains("uid")) { ele.textContent = "BLOCKED"; } else { ele.style.visibility = "hidden"; } }); item.style.pointerEvents = "none"; } await sleep(2000 + Math.random * 1000); } }); } } })();