Greasy Fork is available in English.

shumin-Bilibili

视频结束时自动关全屏,添加获取视频封面按钮,修改为彩虹进度条高能进度条改灰色,缩窄顶栏,简化动态页,清理链接,不显示视频页面的弹幕盒子、广告等右栏杂物,直接显示推荐视频。

// ==UserScript==
// @name            shumin-Bilibili
// @namespace       https://www.tampermonkey.net/
// @version         2.0.2
// @description     视频结束时自动关全屏,添加获取视频封面按钮,修改为彩虹进度条高能进度条改灰色,缩窄顶栏,简化动态页,清理链接,不显示视频页面的弹幕盒子、广告等右栏杂物,直接显示推荐视频。
// @author          庶民player
// @license         MIT
// @match           *.bilibili.com/*
// @icon            https://static.hdslb.com/images/favicon.ico
// @require         https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js
// @grant           none
// @run-at          document-idle
// ==/UserScript==
 
 
 
function go_dn(elem_name){
    for(
        let cur_li = $(elem_name) , next_li = cur_li.next();
        next_li.length > 0;
        next_li = cur_li.next()
    ){
        next_li.after(cur_li);
    }
}
function thin_top(){
    let set_h = 42

    function thin_topbar(){
        $(".bili-header.fixed-header")[0].style.cssText += 'height: '+set_h+'px !important; min-height: '+set_h+'px !important;';
        $(".bili-header__bar.mini-header")[0].style.cssText += 'height: '+set_h+'px !important; min-height: '+set_h+'px !important;';

        $(".bili-header__bar.mini-header").css({
            "padding-left": "7px",
            "padding-right": "0px",
        });
    }

    thin_topbar();
    const observer = new MutationObserver(() => {
        $("#biliMainHeader")[0].style.cssText += 'height: '+ set_h +'px !important; min-height: '+set_h+'px !important; top: '+( (set_h-64)/2 )+'px !important;';

        thin_topbar();
    });
    observer.observe(document.body, { childList: true, subtree: true });// 开始观察特定的DOM节点
}
 
 
$(document).ready(function () {
     thin_top();
 
 
//-=-=-=-=-=-=-=-=-=-=-=-=-t.bili-=-=-=-=-=-=-=-=-=-=-=-
    
    if (window.location.href.indexOf("t.bilibili.com") >= 0 ){
 
        if(window.location.href.indexOf("tab=video") < 0)
            $(".bili-dyn-list-tabs__item:nth-child(2)").click();
        //window.location.href = "https://t.bilibili.com/?tab=video";
 
        $(".right").hide();
        $(".left").hide();
 
        $(".bili-backtop").css({
            "right": "0px",
            "bottom": "300px",
        });
 
        $(document.body).css({'overflow-x':'hidden'});
        //$(".left-entry").remove();
        //$(".offset-center-search").remove();
 
        return;
    }
 
//-=-=-=-=-=-=-=-=-=-=-=-=-自动关全屏-=-=-=-=-=-=-=-=-=-=-=-
 
    if (window.location.href.indexOf("bilibili.com/video/") >= 0 ){
        let cycle_id = setInterval(() => {
            if(
                $(".bpx-player-ending").is(":visible") ||
                $(".bpx-player-electric-box").is(":visible") ||
                false
            ) {
                document.webkitCancelFullScreen();
                document.exitFullscreen();
                document.cancelFullScreen();
            }
        }, 1000);
    }
 
//-=-=-=-=-=-=-=-=-=-=-=-=-下移、清理链接、高能进度条改绿色-=-=-=-=-=-=-=-=-=-=-=-
    
    window.onload = function(){
        setTimeout(
            () => {
                go_dn('.video-card-ad-small');
                go_dn('.video-page-game-card-small');
                go_dn('#paybar_module');
                go_dn('#danmukuBox');
 
                if (window.location.href.indexOf("bilibili.com/video/") >= 0 )
                    window.history.replaceState( null, null, window.location.pathname);




                const playedRect = document.querySelector('rect[clip-path="url(#bpx-player-pbp-played-path)"]');
                if (playedRect) {
                    const css = `
                        rect[clip-path="url(#bpx-player-pbp-played-path)"] {
                            fill: #808080 !important; /* 设置 played 部分为绿色 */
                        }
                    `;
                    // 将 CSS 添加到页面
                    var style = document.createElement('style');
                    style.type = 'text/css';
                    style.appendChild(document.createTextNode(css));
                    document.head.appendChild(style);
                }




            },
            5000
        )
    }
 
//-=-=-=-=-=-=-=-=-=-=-=-=-=-彩虹条=-=-=-=-=-=-=-=-=-=-=-=-=
    var css = `
    /* 进度条样式 */
    .bpx-player-progress-schedule-current {
        /*background: linear-gradient(
            to left,
            #FF0000 0%,
            #FF7F00 16.5%,
            #FFFF00 33%,
            #00FF00 50%,
            #0000FF 66%,
            #4B0082 83.5%,
            #9400D3 100%
        ) !important;*/
        background: linear-gradient(
            to left,
            #FF004D 0%,
            #FF6600 16.5%,
            #FFCC00 33%,
            #66FF33 50%,
            #33CCFF 66%,
            #9933FF 83.5%,
            #FF3399 100%
        ) !important;
    }
    /* 缓冲条样式*/
    .bpx-player-progress-schedule-buffer {
        background: repeating-linear-gradient(
            45deg,
            #888888 0,
            #888888 20px,
            #000000 20px,
            #000000 40px
        );
        background-size: 200% 200%;
        animation: barberPole 10s linear infinite;
    }
    @keyframes barberPole {
        0% { background-position: 0% 0%; }
        100% { background-position: 200% 200%; }
    }
    `;
    if (typeof GM_addStyle != "undefined") {
        GM_addStyle(css);
    } else if (typeof PRO_addStyle != "undefined") {
        PRO_addStyle(css);
    } else if (typeof addStyle != "undefined") {
        addStyle(css);
    } else {
        var node = document.createElement("style");
        node.type = "text/css";
        node.appendChild(document.createTextNode(css));
        var heads = document.getElementsByTagName("head");
        if (heads.length > 0) {
            heads[0].appendChild(node);
	} else {
		// no head yet, stick it whereever
		document.documentElement.appendChild(node);
	}
}

//-=-=-=-=-=-=-=-=-=-=-=-=封面-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 
    if (window.location.href.indexOf("bilibili.com/video/") < 0 ) return;
    const openInNew = true; //是否在新标签页中打开图片地址
    const item = document.createElement('item');
    item.id = 'SIR';
    item.innerHTML = `
        <button class="SIR-button">获取封面</button>
    `;
    document.body.append(item)
 
    const style = document.createElement('style');
 
    var ss = `
      #SIR * {
          box-sizing: border-box;
          padding: 0;
          margin: 0;
      }
      #SIR .SIR-button {
          cursor: pointer;
          display: inline-block;
          height: 26px;
          margin-right: 10px;
          border: solid 1px ;
          border-radius: 3px;
          font-size: 13px;
          padding:0 5px;
          z-index: 5;
          opacity: 0.5;
          position:absolute;
    `;/*
 
          color: #FB7299;
          background: #66CCFF;
    */
 
    style.innerHTML = ss
        +"top:"
        +($('#arc_toolbar_report').offset().top + $('#arc_toolbar_report').height()*-0.2)//17
        +"px; left:"
        +($('#arc_toolbar_report').offset().left + $('#arc_toolbar_report').width()*0.58)
        +"px;}";
    const button = item.querySelector('.SIR-button')
    button.onclick = () => {
        if(openInNew) {
        window.open(getUrl());
        } else {
        self.location = getUrl();
        }
    }
    document.head.append(style)
 
    function getUrl() {
        // 获取当前视频的 BV 号
        var source_url = window.location.href;
        var video_BV = /https:\/\/www\.bilibili\.com\/video\/(BV\w+)/i;

        var match = source_url.match(video_BV);
        if (!match) {
            console.error("无法获取BV号");
            return;
        }

        var bvid = match[1]; // 提取 BV 号
        var api_url = `https://api.bilibili.com/x/web-interface/view?bvid=${bvid}`;

        // 创建 XMLHttpRequest 对象并发送 API 请求
        var xhr = new XMLHttpRequest();
        xhr.open('GET', api_url, false);
        xhr.send();

        // 解析 API 响应
        if (xhr.status === 200) {
            var response = JSON.parse(xhr.responseText);

            // 检查响应中是否包含封面地址
            if (response.code === 0 && response.data && response.data.pic) {
                return response.data.pic; // 返回封面图片地址
            } else {
                console.error("未能获取封面信息");
                return;
            }
        } else {
            console.error("请求失败,状态码: " + xhr.status);
            return;
        }
    }



});