Greasy Fork

Greasy Fork is available in English.

小蓝B站下载器功能优化

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

您需要先安装一个扩展,例如 篡改猴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      3.1
// @description  隐藏小蓝B站下载器捐赠页面,优化下载按钮图形和位置
// @author       tutu辣么可爱
// @include      *://*.bilibili.com/video/*
// @license      MIT
// ==/UserScript==

(function() {
	//AddBtn方法用于添加一个新下载图标
	function AddBtn(HostObj) {
		//AddBtnFlag置false,停止循环执行AddBtn方法
		AddBtnFlag = false;
		//获取、创建所需元素
		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("#main");
		var g = HostObj.shadowRoot.querySelector("#toggle");
		//构建新按钮
		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.children[0].innerText = "小蓝B站视频下载器(优化版)";
		//新按钮加上鼠标悬停/离开/点击功能
		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() {
			g.click();
		}
		//在页面上添加新按钮
		a.appendChild(b);
		b.appendChild(c);
		b.appendChild(e);
		c.appendChild(d);
	}
	//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";
			//隐藏成功,运行标志operation0置true
			operation0 = true;
		}
		if (HelperLogs) {
			//日志宽度重设
			HelperLogs.style.width = "100%";
			HelperLogs.style.maxWidth = "max-content";
			//重设成功,运行标志operation1置true
			operation1 = true;
		}
		//全部操作都成功,HideFnFlag置false,停止循环执行HideFn方法
		if (operation0 && operation1) {
			HideFnFlag = false;
		}
	}
	//隐藏或显示原下载页面
	function OriginDisplayStyle(HostObj) {
		//获取原下载按钮内容
		var a = HostObj.shadowRoot.querySelector("#toggle").innerText;
		//获取原下载页面主体框架
		var b = HostObj.shadowRoot.querySelector("#content");
		//通过判断原下载按钮内容来显示/隐藏原下载页面
		if (a === "收起") {
			b.style.display = "";
		} else {
			b.style.display = "none";
		}
	}
	//主程序部分
	//运行标志
	var HideFnFlag = true;
	var AddBtnFlag = true;
	//启动定时器,间隔为200ms
	var Timer = setInterval(function() {
		//ID为bilibili-helper-host的元素就是原下载页面部分
		var HostObj = document.getElementById("bilibili-helper-host");
		//通过判断HostObj是否存在来判断是否启动了相关扩展
		if (HostObj) {
			//循环执行OriginDisplayStyle方法
			OriginDisplayStyle(HostObj);
			//通过HideFnFlag判断是否需要执行HideFn方法
			if (HideFnFlag) {
				HideFn(HostObj);
			}
			//通过AddBtnFlag判断是否需要执行AddBtn方法
			if (AddBtnFlag) {
				//视频总时长元素
				let LoadFinishFlag = document.getElementsByClassName("bilibili-player-video-time-total")[0];
				//只有播放器、视频加载完毕(判断标准:视频总时长元素存在且不为00:00)才执行AddBtn方法
				if (LoadFinishFlag && LoadFinishFlag.innerText !== "00:00") {
					AddBtn(HostObj);
				}
			}
		}
	}, 200);
	console.log("小蓝B站下载器功能优化启动(定时器ID:" + Timer + ")");
})();