// ==UserScript== // @name 小蓝B站下载器功能优化 // @namespace http://tampermonkey.net/ // @version 2.0 // @description 隐藏小蓝B站下载器捐赠页面,优化下载按钮图形和位置 // @author 那年那兔那些事 // @include *://*.bilibili.com/video/* // @downloadURL none // ==/UserScript== (function() { function AddBtn(HostObj) { var a = document.getElementsByClassName("ops")[0]; var b = document.createElement("span"); var c = document.createElementNS("http://www.w3.org/2000/svg", "svg"); var d = document.createElementNS("http://www.w3.org/2000/svg", "path"); var e = document.createElement("span"); var f = HostObj.shadowRoot.querySelector("#toggle"); var g = document.createElement("button"); var h = HostObj.shadowRoot.querySelector("#main"); b.title = "下载"; b.setAttribute("class", "download"); c.setAttribute("xmlns", "http://www.w3.org/2000/svg"); c.setAttribute("viewBox", "0 0 34 34"); c.style = "width: 34px; height: 34px; left: -3px; top: -3px;"; c.setAttribute("class", "ring-progress"); c.setAttribute("fill", "#757575"); d.setAttribute("d", "M13 8h8v8h-8z M9 16L25 16 17 25z M6 25h22v2h-22z M6 21h2v4h-2z M26 21h2v4h-2z"); e.innerText = "下载"; e.style = "padding-left:34px;color:#505050;"; f.style.display = "none"; f.parentElement.style.marginTop = "20px"; f.parentElement.style.marginRight = "20px"; g.style = "border:0 none;border-radius:6px;outline:none;cursor:pointer;background:#00A1D6;color:#fff;padding:10px 20px;display:none"; g.innerText = "隐藏"; g.id = "newHideBtn"; h.children[0].innerText = "小蓝B站视频下载器(优化版)"; h.parentElement.style.display = "none"; g.onclick = function() { g.style.display = "none"; f.click(); h.parentElement.style.display = "none"; } b.onmouseover = function() { c.setAttribute("fill", "#00a1d6"); e.style.color = "#00a1d6"; } b.onmouseleave = function() { c.setAttribute("fill", "#757575"); e.style.color = "#505050"; } b.onclick = function() { f.click(); h.parentElement.style.display = ""; g.style.display = ""; } a.appendChild(b); b.appendChild(c); b.appendChild(e); c.appendChild(d); if (f.parentElement.childElementCount > 1) { for (let i = 1; i < f.parentElement.childElementCount; i++) { f.parentElement.children[i].remove(); } } f.parentElement.appendChild(g); AddBtnFlag = false; } //HideFn()方法用于隐藏捐赠部分 function HideFn(HostObj) { //运行成功标志 var operation0 = false; var operation1 = false; //从bilibili-helper-host中获取id为side-bar的对象,这个对象就是捐赠部分 var SideBar = HostObj.shadowRoot.querySelector("#side-bar"); //从bilibili-helper-host中获取id为bilibliHelperLogs的对象,这个对象就是日志部分 var HelperLogs = HostObj.shadowRoot.querySelector("#bilibliHelperLogs"); //以防万一,先确认对象存在,再进行下一步 if (SideBar) { //隐藏捐赠部分 SideBar.style.display = "none"; //隐藏成功,返回值置false operation0 = true; } if (HelperLogs) { //日志宽度重设 HelperLogs.style.width = "100%"; HelperLogs.style.maxWidth = "max-content"; //重设成功,返回值置false operation1 = true; } if (operation0 && operation1) { //全部操作都成功,HideFnFlag置false HideFnFlag = false; } } //RunFn()方法用于执行所有功能 function RunFn(HostObj) { //先确认HostObj对象存在,再进行下一步 if (HostObj) { if (HideFnFlag) { HideFn(HostObj); } if (AddBtnFlag) { AddBtn(HostObj); } } } function RunMonitor(HostObj) { //先确认HostObj对象存在,再进行下一步 if (HostObj) { var SideBar = HostObj.shadowRoot.querySelector("#side-bar"); var HelperLogs = HostObj.shadowRoot.querySelector("#bilibliHelperLogs"); var DownloadBtn = document.getElementsByClassName("download")[0]; if (SideBar.style.display !== "none" || HelperLogs.style.width !== "100%" || HelperLogs.style .maxWidth !== "max-content") { HideFnFlag = true; console.log("HideFn运行错误,重启HideFn"); } if (DownloadBtn === undefined) { AddBtnFlag = true; console.log("AddBtn运行错误,重启AddBtn"); } } } //运行标志 var HideFnFlag = true; var AddBtnFlag = true; var RunMonitorFlag = false; //获取id为bilibili-helper-host的对象 var HostObj; //定时器循环,间隔为200ms var Timer = setInterval(function() { HostObj = document.getElementById("bilibili-helper-host"); //通过RunMonitorFlag启动运行监控 if (RunMonitorFlag) { RunMonitor(HostObj); } //只要有一个功能需要运行就运行RunFn if (HideFnFlag || AddBtnFlag) { RunFn(HostObj); //启动运行监控 RunMonitorFlag = true; } }, 200); console.log("小蓝B站下载器功能优化开始,启动定时器(ID:" + Timer + ")") //2s超时 setTimeout(function() { //结束200ms的定时器 clearInterval(Timer); var success = 0; var fail = 0; if (HideFnFlag) { fail += 1; } else { success += 1; } if (AddBtnFlag) { fail += 1; } else { success += 1; } var msg = "小蓝B站下载器功能优化运行结束,释放定时器(ID:" + Timer + "):\n优化成功 " + success + " 个功能,优化失败 " + fail + " 个功能"; console.log(msg); }, 5000); })();