// ==UserScript== // @name 根据番号快速搜索 // @version 0.9.6 // @description 标记网页上的所有番号, 在相关网站快速方便的进行搜索 // @author XiJinPing // @exclude *://www.52pojie.cn/* // @exclude *://meta.appinn.net/* // @exclude *://v2ex.com/* // @exclude *://greasyfork.org/* // @exclude *://bilibili.com/* // @exclude *://www.douyin.com/* // @exclude *.1688.com/* // @exclude *.taobao.com/* // @exclude *.jd.com/* // @exclude *.smzdm.com/* // @grant GM_addStyle // @grant GM_getValue // @grant GM_setValue // @grant GM_xmlhttpRequest // @grant GM_setClipboard // @run-at document-end // ==/UserScript== (function() { 'use strict'; var timer; var avInfo = {}; // 临时存储相关信息 var localInfo = {}; // 从本地获取到的番号信息 var Trans = { // 临时存储翻译的相关信息 id:"", transText:"", trans:[] } var allHTML = document.querySelector("body"); // 对于一些网站,可能需要第二种正则来匹配 var oregExp = /(?-1){ return otext; } if(otemp<0){ // 没有横杠 if(oSpecial>-1){ // 匹配到 特殊的单词, 直接返回 return otext; }else if(oOnlyNum.length==3 && oSpecial<0){ // 未匹配到特殊的单词,并且数字的个数为3 将其视为番号, 添加横杠 var oindex = otext.search(/\d/); otext = otext.slice(0,oindex) + "-" + otext.slice(oindex) } else { // 如果数字的个数是2个或者4个,不是番号的可能性更大些,直接返回。 return otext; } } odiv.dataset.av = otext; odiv.innerHTML = otext; return odiv; } }); } findAndReplaceDOMTextFun(); var findFun = setInterval(findAndReplaceDOMTextFun,1000); function createPattenr(id){ var linkJavbusPage = "https://www.javbus.com/" + id; var linkJavbus = "https://www.javbus.com/search/" + id; var linkJavLib = "http://www.javlibrary.com/cn/vl_searchbyid.php?keyword=" + id; var linkbtsow = "https://btsow.com/search/" +id; var aPattern = "" + "javbus 页面" + "" + "javbus 搜索" + "" + "javLib 搜索" + "" + "btsow 搜索" + ""; var ofloat = document.createElement("avdiv") ofloat.classList.add("av-float"); ofloat.innerHTML=aPattern; return ofloat; } // 点击番号复制 document.onclick=function(e){ if(e.target.dataset.av){ GM_setClipboard(e.target.dataset.av) } } // 鼠标划过显示信息 document.onmouseover = function(e){ if(e.target.className=="avclass"){ var avid = e.target.dataset.av; if(document.querySelector(".av-float")){ console.log("已存在"); }else{ var oPosition = e.target.getBoundingClientRect() var odiv = createPattenr(e.target.dataset.av) document.body.appendChild(odiv); odiv.style.left = oPosition.x + "px"; odiv.style.top = oPosition.y + oPosition.height + "px"; avInfo = {}; localInfo = GM_getValue("avInfo"); if(!localInfo){ GM_setValue("avInfo",{}); localInfo = {}; } if(localInfo[avid]){ console.log("老司机共浏览了" + Object.keys(localInfo).length + "个番号!"); avInfo = localInfo[avid]; timer = setTimeout(() => { console.log("停留超过1.5s, 重新加载图片"); getInfo(avid,true); settingPostion(); //重置位置 }, 1500); } else{ console.log("需要从网络获取"); getInfo(e.target.dataset.av); } var otherInfo = document.createElement('avdivs'); otherInfo.innerHTML=addOtherInfo(); odiv.appendChild(otherInfo); settingPostion(); //重置位置 } }else if(e.target.className=="av-float" || e.target.className=="avclass"|| e.target.className=="av-floatdiv" || e.target.nodeName == "avdiv" ||e.target.nodeName =="IMG"){ // console.log("这是一条没有意义的消息"); ; }else{ var odiv = document.querySelector(".av-float") if(odiv){ odiv.parentNode.removeChild(odiv) // console.log("移除"); } clearTimeout(timer); } } // 调整距离底部的距离,以防越界 function settingPostion(){ var odiv = document.querySelector(".av-float"); if(!odiv) return; var oClient = odiv.getBoundingClientRect() var oTop = oClient.top; var oHeight = oClient.height; var winHeight = document.documentElement.clientHeight; if(oTop + oHeight > winHeight){ // console.log("越界"); odiv.style.top = "unset"; odiv.style.bottom = 0; } } function getInfo(avID,oReload){ // console.log("函数:getInfo(avID,oReload)"); GM_xmlhttpRequest({ method: 'get', url: 'https://www.javbus.com/' + avID, headers: { "Content-Type": "application/x-www-form-urlencoded" }, data: "", onload: function (data) { var parser=new DOMParser(); var htmlDoc=parser.parseFromString(data.responseText, "text/html"); // 番号 avInfo.id = avID; // 标题 avInfo.title = htmlDoc.title.replace(avID,"").replace(" - JavBus",""); // 获取演员名字 var starNameList = htmlDoc.querySelectorAll(".star-name"); var starName = []; for(var i=0;i { clearInterval(interval) }, 2000) return; } // console.log("获取到的所有信息: "); // console.log(avInfo); // console.log("------------------"); var otherInfo = document.createElement('avdivs'); otherInfo.innerHTML = addOtherInfo() otherInfo.appendChild(image); document.querySelector(".av-float").appendChild(otherInfo); settingPostion(); //重置位置 } }); } function addOtherInfo(){ // console.log("函数: addOtherInfo()"); // console.log(avInfo.starName); var actors = "" var str = ""; if(avInfo.starName && avInfo.starName.length>0){ for(var i=0;i"+ avInfo.starName[i] + ", "; } actors = actors.slice(0,actors.length-2); str += "演员: " + actors + "" } if(avInfo.titleTrans){ str += "标题(译): " + avInfo.titleTrans + "" }else if(avInfo.title){ str += "标题: " + avInfo.title + "" } if(avInfo.tags && avInfo.tags.length>0){ str += "标签: " + avInfo.tags + "" } if(avInfo.series){ str += "" + avInfo.series + "" } if(avInfo.date){ str += "" + avInfo.date + "" } return str; } // 翻译函数取自于作者 Johnny Li 的脚本 “网页翻译助手” version:1.2.9, https://greasyfork.org/zh-CN/scripts/389784 许可协议MIT // 作者 Johnny Li // 脚本 “网页翻译助手” // version:1.2.9, // https://greasyfork.org/zh-CN/scripts/389784 // 许可协议 MIT function googleTrans() { var h_url = ""; var googleTransApi = "https://translate.google.cn/translate_a/single?client=gtx&dt=t&dj=1&sl=auto&tl=zh-CN&hl=zh-CN"; h_url = googleTransApi + "&q=" + encodeURIComponent(Trans.transText); GM_xmlhttpRequest({ method: "GET", url: h_url, onload: function (r) { setTimeout(function () { var data = JSON.parse(r.responseText); var trans = []; for (var i = 0; i < data.sentences.length; i++) { var getransCont = data.sentences[i]; trans.push(getransCont.trans); } Trans.trans = trans; // console.log("翻译结果:"); // console.log(trans); localInfo[Trans.id].titleTrans = trans; GM_setValue("avInfo",localInfo); document.querySelector("#searchAVMenuTitle").innerHTML = "标题(译): " + trans; }, 300); }, onerror: function (e) { console.error(e); } }); } function getActorInfo(acterName){ console.log("函数: getActorInfo(acterName"); // https://xslist.org/search?query=%E3%81%95%E3%81%A4%E3%81%8D%E8%8A%BD%E8%A1%A3&lg=zh var actor_url = 'https://xslist.org/search?query=' + acterName + "&lg=zh"; console.log(actor_url); GM_xmlhttpRequest({ method: 'GET', url: actor_url, onload: function (data) { setTimeout(function () { console.log("这是获取到的演员信息"); console.log(data.responseXML); var parser=new DOMParser(); var htmlDoc=parser.parseFromString(data.responseText, "text/html"); var avActorLink = htmlDoc.querySelector("a"); console.log(avActorLink); }, 300); }, onerror: function (e) { console.error(e); } }); } GM_addStyle(".av-float{" + "position: fixed;" + "display: block;" + "color: #000;" + "background:rgba(255,255,255,.8);" + "backdrop-filter: blur(5px);" + "border:1px solid #fff;" + "border-radius: 4px;" + "padding:6px;" + "margin-top: -2px; " + "z-index: 99999; " + "font-size: 14px;" + "}" + "avdiv{" + "display:block;" + "}" + ".av-float img{" + "max-width: 100%;" + "}" + ".av-float a:link," + ".av-float a:visited{" + "color: #000" + "}" + ""); })();