Greasy Fork

Greasy Fork is available in English.

小蓝B站下载器功能优化

隐藏小蓝B站下载器捐赠页面,优化下载按钮图形和位置

当前为 2021-09-24 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         小蓝B站下载器功能优化
// @namespace    http://tampermonkey.net/
// @version      2.0
// @description  隐藏小蓝B站下载器捐赠页面,优化下载按钮图形和位置
// @author       那年那兔那些事
// @include      *://*.bilibili.com/video/*
// ==/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);
})();