BiliBili Tags Blocker BiliBili标签屏蔽助手

眼不见为净,耳不听为清,心不想则静

目前为 2022-08-04 提交的版本。查看 最新版本

// ==UserScript==
// @name         BiliBili Tags Blocker BiliBili标签屏蔽助手
// @namespace    https://gf.qytechs.cn/zh-CN/users/924205-xiao-xi
// @version      0.4.6
// @description  眼不见为净,耳不听为清,心不想则静
// @author       xiaoxi
// @license      MIT
// @include      *://www.bilibili.com/*
// @include      *://t.bilibili.com/*
// @include      *://search.bilibili.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=bilibili.com
// @require      https://cdn.bootcdn.net/ajax/libs/jquery/2.2.4/jquery.min.js
// @require      https://gf.qytechs.cn/scripts/407543-block-obj/code/Block_Obj.js?version=963893
// @grant        GM_xmlhttpRequest
// @grant        unsafeWindow
// @grant        GM_getValue
// @grant        GM.getValue
// @grant        GM_setValue
// @grant        GM.setValue
// @grant        GM_setClipboard
// @grant        GM.setClipboard
// @grant        GM_registerMenuCommand
// @grant        GM_addValueChangeListener
// @run-at       document-start
// ==/UserScript==
// https://gf.qytechs.cn/zh-CN/scripts/417760-checkjquery
var BiliBiliTagsBlocker = {
    functionEnable: true,
    onlyChangeColorEnable: false,
    removeSpecialEnable: false,
    removeNextVideo: false,
    tagsArray: [],
};
const BASIC_STYLE = `
     .block_obj_checkbox_label {
         padding-left: 13px;
     }
  `;
let blockObj = new Block_Obj('BiliBili_Tags_Blocker');
function initSettingUI(){
    if(!isCheckSetting){
        blockObj.init({
            id: 'BiliBiliTagsBlocker',
            menu: 'Tags屏蔽设置',
            style: BASIC_STYLE,
            field: [
                {
                    id: 'version',
                    label: 'v0.4.6',
                    type: 's',
                },
                {
                    id: 'functionEnable',
                    label: '启用屏蔽功能',
                    title: '总开关',
                    type: 'c',
                    default: true,
                },
                {
                    id: 'removeSpecialEnable',
                    label: '移除特别推荐',
                    title: '多为推广',
                    type: 'c',
                    default: false,
                },
                {
                    id: 'removeNextVideo',
                    label: '移除接下来播放',
                    title: '推荐的什么jb',
                    type: 'c',
                    default: false,
                },
                {
                    id: 'onlyChangeColorEnable',
                    label: '看看屏蔽了什么',
                    title: '更改屏蔽视频的背景色',
                    type: 'c',
                    default: false,
                    move_right: true,
                },             
                {
                    label: 'Tag设置',
                    type: 's',
                },
                {
                    id: 'tagInput',
                    label: '输入:',
                    placeholder: ' 同时输入多个时以英文逗号分隔 ',
                    type: 'i',
                    list_id: 'tagsArray',
                    //classname: MODULE.WHITELIST.className,
                },
                {
                    id: 'tagsArray',
                    type: 'l',
                    default: [],
                    //classname: MODULE.WHITELIST.className,
                },
            ],
            events: {
                save: config => {
                    BiliBiliTagsBlocker = config;
                },
                change: config => {
                    BiliBiliTagsBlocker = config;
                },
            },
        });
    }
    isCheckSetting = true;
}
var scrollTop = 0;
//视频信息
var videoInfo = [];
var oldVideoInfo = [];
var isLoading = false;
let href = location.href;
let matchSearch = href.match(/search.bilibili/);
let matchPopular = href.match(/popular/);
let matchPost = href.match(/t.bilibili/);
let matchVideo = href.match(/video/);
let matchHome = href.match(/bilibili.com/);

//=======================通用=========================
//当前搜索区域id
var currentSectionId;

//获取视频信息
function initvideoInfo(match,parameter)
{
    let loaded = 0;
    if(match == "popular"){
        let videoCardList = $(".video-card__content");
        videoCardList.each(function(i){
            let href = $(this).children("a").attr("href");
            let videoCard = $(this).parent(".video-card");
            let videoCardTitle = videoCard.children(".video-card__info").children("p").attr("title")

            let bvInfo = {
                bv : getBvcountber(href),
                index : i,
                card : videoCard,
                title : videoCardTitle,
            }
            loaded++;
            videoInfo.push(bvInfo);
        });
    }
    if(match == "popular-reload"){
        //console.log(parameter);
        $.each(parameter, function(i, videoCard){
            let href = videoCard.children(".video-card__content").children("a").attr("href");
            let videoCardTitle = videoCard.children(".video-card__info").children("p").attr("title")
            let bvInfo = {
                bv : getBvcountber(href),
                index : i,
                card : videoCard,
                title : videoCardTitle,
            }
            loaded++;
            videoInfo.push(bvInfo);
        });
    }
    if(match == "search"){
        //let videoCardList = $("li.video-item");
        let videoCardList = $(".video-item");
        videoCardList.each(function(i){
            let href = $(this).children("a").attr("href");
            let title;
            if($(this).children("a").attr("title") != undefined)
            {
                title = $(this).children("a").attr("title");

            }
            else{
                var t = $(this).children("a").context.innerText.split("\n");
                title = t[1];
            }
            let bvInfo = {
                bv : getBvcountber(href),
                index : i,
                title : title,
                context : $(this)
            }
            loaded++;
            videoInfo.push(bvInfo);
        });

    }
    if(match == "search-reload"){
        parameter.each(function(i){
            let href = $(this).children("a").attr("href");
            let title;
            if($(this).children("a").attr("title") != undefined)
            {
                title = $(this).children("a").attr("title");

            }
            else{
                var t = $(this).children("a").context.innerText.split("\n");
                title = t[1];
            }
            let bvInfo = {
                bv : getBvcountber(href),
                index : i,
                title : title,
                context : $(this)
            }
            loaded++;
            videoInfo.push(bvInfo);

        });
    }
    if(match == "post"){
        let postCardList = $(".bili-dyn-list__items").children(".bili-dyn-list__item");
        $(postCardList).each(function(i){
            let bv = getBvcountber($(this).children(".bili-dyn-item").children(".bili-dyn-item__main").children(".bili-dyn-item__body").children(".bili-dyn-content").children(".bili-dyn-content__orig").children(".bili-dyn-content__orig__major").children("a").attr("href"));
            let videoCard = $(this).children(".bili-dyn-item").children(".bili-dyn-item__main");
            if(bv != undefined){
                let bvInfo = {
                    bv : bv,
                    index : i,
                    card : $(this),
                    color : videoCard,
                    title : "",
                }
                loaded++;
                videoInfo.push(bvInfo);
            }
        });
    }
    if(match == "post-reload"){
        $(parameter).each(function(i){
            let bv = getBvcountber($(this).children(".bili-dyn-item").children(".bili-dyn-item__main").children(".bili-dyn-item__body").children(".bili-dyn-content").children(".bili-dyn-content__orig").children(".bili-dyn-content__orig__major").children("a").attr("href"));
            let videoCard = $(this).children(".bili-dyn-item").children(".bili-dyn-item__main");
            if(bv != undefined){
                let bvInfo = {
                    bv : bv,
                    index : i,
                    card : $(this),
                    color : videoCard,
                    title : "",
                }
                loaded++;
                videoInfo.push(bvInfo);
            }
        });
    }
    if(match == "home"){
        let videoCardList = $('.rcmd-box').children();
        videoCardList.each(function(i){
            if(i <= 9){
                let href = $(this).children(".info-box").children("a").attr("href");
                let videoCard = $(this);
                let videoCardTitle = $(this).children(".info-box").children("a").children("img").attr("alt")
                let bvInfo = {
                    bv : getBvcountber(href),
                    index : i,
                    card : videoCard,
                    title : videoCardTitle,
                }
                loaded++;
                videoInfo.push(bvInfo);
            }
        });
    }
    if(match == "navbar"){
        let videoCardList = $(parameter).children(".list-item");
        videoCardList.each(function(i){
            let href = $(this).children(".main-container").children("a").attr("href");
            let videoCard = $(this);
            let videoCardTitle = $(this).attr("title")
            let bvInfo = {
                bv : getBvcountber(href),
                index : i,
                card : videoCard,
                title : videoCardTitle,
            }
            loaded++;
            videoInfo.push(bvInfo);
        });

    }
    if(match == "navbar-reload"){
        let videoCardList = $(parameter);
        videoCardList.each(function(i){
            let href = $(this).children(".main-container").children("a").attr("href");
            let videoCard = $(this);
            let videoCardTitle = $(this).attr("title")
            let bvInfo = {
                bv : getBvcountber(href),
                index : i,
                card : videoCard,
                title : videoCardTitle,
            }
            loaded++;
            videoInfo.push(bvInfo);
        });

    }
    if(match == "video"){
        let videoCardList = $(parameter).children(".video-page-card");
        videoCardList.each(function(i){
            let href = $(this).children(".card-box").children(".info").children("a").attr("href");
            let videoCard = $(this);
            let videoCardTitle = $(this).children(".card-box").children(".info").children("a").children("span").attr("title");
            let bvInfo = {
                bv : getBvcountber(href),
                index : i,
                card : videoCard,
                title : videoCardTitle,
            }
            loaded++;
            videoInfo.push(bvInfo);
        });

    }
    if(match == "video-reload"){
        let videoCardList = $(parameter);
        videoCardList.each(function(i){
            let href = $(this).children(".card-box").children(".info").children("a").attr("href");
            let videoCard = $(this);
            let videoCardTitle = $(this).children(".card-box").children(".info").children("a").children("span").attr("title");
            let bvInfo = {
                bv : getBvcountber(href),
                index : i,
                card : videoCard,
                title : videoCardTitle,
            }
            loaded++;
            videoInfo.push(bvInfo);
        });

    }
    return new Promise(function (isLoad) {
        let checkvideoInfo = setInterval(function () {
            $.each(videoInfo, function(i, v){
                if(loaded == videoInfo.length){
                    clearInterval(checkvideoInfo);
                    isLoad(true);
                }
            });
            if (match == "home"){
                if(loaded == videoInfo.length){
                    clearInterval(checkvideoInfo);
                    isLoad(true);
                }
            }
        }, 500);
    });
}
//==============video================
function initVideoListener(){

    let index = 0;
    var targetNode = $('.rec-list')[0];
    var options = {childList: true,attributes :true};
    //console.log("init Video监听");
    function callback(mutationsList, observer) {
        //console.log("callback Navbar监听");
        if(mutationsList.length >= 1 && mutationsList[0].addedNodes.length!=0 && isLoading == false){
            //console.log("callback Video监听");
            oldVideoInfo = videoInfo;
            videoInfo = [];
            isLoading = true
            let cardList = [];
            $.each(mutationsList, function(i, m){
                cardList.push(m.addedNodes[0]);
            });
            // console.log(cardList);
            Remove("video-reload","video",cardList);
        }


    }
    let mutationObserver = new MutationObserver(callback);
    let checkTarget = setInterval(function () {
        if(targetNode !=  undefined && targetNode !=  null){
            mutationObserver.observe(targetNode, options);
            clearInterval(checkTarget);
            if(BiliBiliTagsBlocker.removeSpecialEnable){
                if(BiliBiliTagsBlocker.onlyChangeColorEnable){
                    $($(targetNode).children("div")[0]).css({"background":"blue"});
                }
                else
                {
                    $($(targetNode).children("div")[0]).css({"display":"none"});
                }
            }
            Remove("video","video",targetNode);

        }

    }, 50);
}





//获取视频Tag信息
function initVideoTagInfo() {
    let loaded = false;
    $.each(videoInfo, function(i, b){
        $.ajax("https://api.bilibili.com/x/web-interface/view/detail/tag?bvid=BV"+b.bv, {
            method: 'GET',
            headers: {
                "content-type": "application/json"
            },
            async: true,
            success: function (tags) {
                let tagInfo = {
                    tags : tags
                }
                b["Tags"] = tagInfo;
                let r = {
                    isRemove : false
                }
                b["isRemove"] = r;
            },
        });
    });

    return new Promise(function (isLoad) {
        let checkTagsInfo = setInterval(function () {
            $.each(videoInfo, function(i, v){
                if (v.hasOwnProperty("Tags") && v.Tags.hasOwnProperty("tags") && videoInfo[0].hasOwnProperty("isRemove")) {
                    if (v.Tags.tags.hasOwnProperty("data")) {
                        if(i == videoInfo.length-1){
                            clearInterval(checkTagsInfo);
                            isLoad(true);
                        }
                    }
                }

            });
        }, 500);
    });
}
//设置需要删除的视频
function setRemoveVideo(){
    let loaded = 0;
    $.each(videoInfo, function(i, v){
        //if(loaded == 0){
        //console.log(videoInfo);
        // }
        loaded++;
        if (v.hasOwnProperty("Tags") && v.Tags.hasOwnProperty("tags") && videoInfo[0].hasOwnProperty("isRemove")) {
            if (v.Tags.tags.hasOwnProperty("data") && v.Tags.tags.data.length > 0) {
                $.each(v.Tags.tags.data, function(i, t){
                    $.each(BiliBiliTagsBlocker.tagsArray, function(i, bt){
                        if(bt == t.tag_name){
                            let r = {
                                isRemove : true
                            }
                            v["isRemove"] = r;
                        }
                    });
                });
            }
        }
    });
    return new Promise(function (isLoad) {
        let checkTagsInfo = setInterval(function () {
            if (videoInfo.length == loaded) {
                clearInterval(checkTagsInfo);
                isLoad(true);
            }
        }, 500);
    });

}
//删除网页中的视频
function removeVideo(match){
    //console.log(videoInfo);
    let count = 0
    $.each(videoInfo, function(i, v){
        //console.log(v);

        //console.log(v.card.children(".info-box").children("a").children(".info").children(".title").text(i));
        if(v.hasOwnProperty("isRemove") && v.isRemove.hasOwnProperty("isRemove")  && !v.isRemove.isRemove && oldVideoInfo != videoInfo && match == "home"){
            insertList.push(v);
        }
        if(v.hasOwnProperty("isRemove") && v.isRemove.hasOwnProperty("isRemove")  && v.isRemove.isRemove && oldVideoInfo != videoInfo){
            if(match == "popular"){
                //console.log($(v.card));
                if(BiliBiliTagsBlocker.onlyChangeColorEnable){
                    v.card.css({"background":"blue"})
                }else{
                    v.card.remove();
                }
                //console.log((v.index+1)+"  "+ v.bv + "  " + v.title);
            }
            if(match == "search"){
                if(BiliBiliTagsBlocker.onlyChangeColorEnable){
                    v.context.css({"background":"blue"})
                }else{
                    v.context.css({"display":"none"});
                }
            }
            if(match == "post"){
                //console.log(v.card);
                if(BiliBiliTagsBlocker.onlyChangeColorEnable){
                    v.color.css({"background":"blue"})
                }else{
                    v.card.css({"display":"none"});
                }
            }
            if(match == "home"){
                if(BiliBiliTagsBlocker.onlyChangeColorEnable){
                    v.card.css({"background":"blue"})
                }else{
                    removeCount++;
                    removeList.push(v);
                    v.card.css({"display":"none"});
                    //v.card.remove();
                }
            }
            if(match == "navbar"){
                //console.log(v);
                if(BiliBiliTagsBlocker.onlyChangeColorEnable){
                    v.card.css({"background":"blue"})
                }else{
                    v.card.css({"display":"none"});
                    //v.card.css({"background":"blue"})
                    //v.card.remove();
                }
            }
            if(match == "video"){
                //console.log(v);
                if(BiliBiliTagsBlocker.onlyChangeColorEnable){
                    v.card.css({"background":"blue"})
                }else{
                    v.card.css({"display":"none"});
                    //v.card.css({"background":"blue"})
                    //v.card.remove();
                }
            }
        }
    });
    if(match == "home" && removeCount >= 1){
        $.each(removeList, function(i, v){
            count++
            if(v.index < 5){
                //console.log(v);
                //console.log("================");
                let num = 6-v.index;
                for (let i = 1; num >= i; i++) {
                    //console.log(insertList[insertList.length-i]);
                    setTimeout(function(){
                        $('.rcmd-box').prepend(insertList[insertList.length-i].card);
                    },100);
                }
            }
        })
    }
}

function Remove(init_match,remove_match,parameter){
    isLoading = true;
    initvideoInfo(init_match,parameter).then(function (resolve) {
        initVideoTagInfo().then(function (resolve) {
            setRemoveVideo().then(function (resolve) {
                removeVideo(remove_match)
                if(!home_first){
                    setTimeout(function(){
                        home_first = true
                    },300);
                }
                if(matchHome){
                    setTimeout(function(){
                        isLoading = false;
                    },300);
                }else{
                    isLoading = false;
                }
            });
        });
    });
}

//视频板块监听器
function initBodyContainListener(){

    var targetNode = $('.body-contain')[0];
    //options:监听的属性
    var options = {childList: true,attributes :true};
    //回调事件
    //console.log("init 板块监听");

    function callback(mutationsList, observer) {
        if(currentSectionId != $(".body-contain").children("div").attr("id"))
        {
            currentSectionId = $(".body-contain").children("div").attr("id");
            console.log("搜索区域变为"+currentSectionId);
            //console.log("板块监听 callback");

            initSearchSectionListener();
            initSearchListener()
            if(currentSectionId == "all-list" || currentSectionId == "video-list"){

                setTimeout(function(){
                    oldVideoInfo = videoInfo;
                    videoInfo = [];
                    //SearchLoading()
                    Remove("search","search",null);

                },1200);
            }
        }

    }
    let mutationObserver = new MutationObserver(callback);
    let checkTarget = setInterval(function () {
        currentSectionId = $(".body-contain").children("div").attr("id");
        console.log("等待搜索区域");
        targetNode = $('.body-contain')[0];
        if(targetNode !=  undefined && targetNode !=  null && currentSectionId != undefined){
            mutationObserver.observe(targetNode, options);

            console.log("搜索区域变为"+currentSectionId);

            // initSearchLoading() BUG
            initSearchSectionListener();
            initSearchListener()
            //SearchLoading() BUG
            setTimeout(function(){
                oldVideoInfo = videoInfo;
                videoInfo = [];
                Remove("search","search",null);
            },500);
            clearInterval(checkTarget);
        }

    }, 500);
}


//=======================热门页面=========================
var f = 2;
//设置监听器,监听新加载的视频
function initPopularListener(){
    var targetNode = $('.card-list')[0];
    //options:监听的属性
    var options = {childList: true,subtree:true};
    //回调事件
    //console.log("init 热门监听");
    function callback(mutationsList, observer) {
        //console.log(mutationsList);
        if(f == 2 && mutationsList[0].addedNodes.length != 0 && videoInfo.length >= 1 && isLoading == false){
            let newCardList = [];
            //console.log("热门监听 callback");
            $.each(mutationsList, function(i, v){
                if(v.addedNodes.length!=0){
                    var newCard = $(v.addedNodes[0]);
                    //newCard.css({"background":"blue"})
                    newCardList.push(newCard);
                }
            });
            let checkNewCards = setInterval(function () {
                if (newCardList.length == 20){
                    videoInfo=[];
                    Remove("popular-reload","popular",newCardList)
                    clearInterval(checkNewCards);
                }
            }, 500);
        }
        if(f == 2 &&mutationsList[0].addedNodes.length != 0 && videoInfo.length >= 1 && isLoading == true){
            let newCardList = [];
            //console.log("热门监听 callback");
            $.each(mutationsList, function(i, v){
                if(v.addedNodes.length!=0){
                    var newCard = $(v.addedNodes[0]);
                    //newCard.css({"background":"blue"})
                    newCardList.push(newCard);
                }
            });
            let checkNewCards = setInterval(function () {
                if (newCardList.length == 20){
                    videoInfo=[];
                    setTimeout(function(){
                        Remove("popular-reload","popular",newCardList)
                    },700);
                    clearInterval(checkNewCards);
                }
            }, 500);
        }
        if(f == 1 && mutationsList[0].addedNodes.length != 0 && videoInfo.length >= 1 && isLoading == false){
            videoInfo=[];
            Remove("popular","popular",null)
        }
        if(f == 1 && mutationsList[0].addedNodes.length != 0 && videoInfo.length >= 1 && isLoading == true){
            videoInfo=[];
            setTimeout(function(){
                Remove("popular","popular",null)
            },700);
        }
    }

    let mutationObserver = new MutationObserver(callback);
    let checkTarget = setInterval(function () {
        if(targetNode !=  undefined && targetNode !=  null){
            mutationObserver.observe(targetNode, options);
            clearInterval(checkTarget);
            Remove("popular","popular",null)
        }

    }, 500);
}
//初始化加载动画
function initLoading(){
    let g_loadingImage = 'https://pp-1252089172.cos.ap-chengdu.myqcloud.com/loading.gif';
    $('.popular-list').prepend('<div id="loading" style="background-color: white;width:100%;text-align:center;position:sticky;z-index:999999;top: 200px;left: 0;"><img style="text-align:center;position:-webkit-sticky;position:sticky;z-index:999999;top: 0;left: 0;" src="' + g_loadingImage + '" /><p id="progress" style="display:none;text-align: center;font-size: large;font-weight: bold;padding-top: 10px;">0%</p></div>');
    $("head").append('<style type="text/css">.no-more{ display: none; } .scroll-loading{ display: none; } .popular-tips{ display: none; }</style>');
    $(".card-list").css({'display': 'none'});
    $(document).scrollTop(0);
}
//进行加载动画
function Loading(){
    $("#loading").css({'display': 'block'});
    $(".card-list").css({'display': 'none'});
    $(document).scrollTop(0);
}
//停止加载动画
function stopLoading(){
    $("#loading").css({'display': 'none'});
    $(".card-list").css({'display': 'flex'});
    $(document).scrollTop(scrollTop)
}

//==================搜索页面=======================
function disConnectListener(){
    //console.log(33333333333);

    //videoListListener.disconnect();
}

//初始化加载动画
function initSearchLoading(){
    let g_loadingImage = 'https://pp-1252089172.cos.ap-chengdu.myqcloud.com/loading.gif';
    $('.body-contain').children("div").prepend('<div id="loadingSearch" style="background-color: white;width:100%;height:92px;text-align:center;position:absolute;z-index:999999;top: 150px;left: 0;"><img style="text-align:center;position:-webkit-sticky;position:sticky;z-index:999999;top: 0;left: 0;" src="' + g_loadingImage + '" /><p id="progress" style="display:none;text-align: center;font-size: large;font-weight: bold;padding-top: 10px;">0%</p></div>');
    //$("head").append('<style type="text/css">.no-more{ display: none; } .scroll-loading{ display: none; } .popular-tips{ display: none; }</style>');
    $(".video-list").css({'display': 'none'});
    //$(document).scrollTop(0);
}
//进行加载动画
function SearchLoading(){
    $("#loadingSearch").css({'display': 'block'});
    $(".video-list").css({'display': 'none'});
    //$(document).scrollTop(0);
}
//停止加载动画
function stopSearchLoading(){
    $("#loadingSearch").css({'display': 'none'});
    $(".video-list").css({'display': 'block'});
    //$(document).scrollTop(scrollTop)
}
//页码监听
function initSearchListener(){

    var targetNode = $('.flow-loader')[0];
    //options:监听的属性
    var options = {childList: true,attributes :true};
    //回调事件
    //console.log("init 页码监听");
    let count = 0;

    function callback(mutationsList, observer) {
        if(mutationsList[0].addedNodes.length!=0 && videoInfo.length>=20 && isLoading == false)
        {
            //console.log("页码监听 callback");
            initSearchSectionListener()
            $.each(mutationsList, function(i, m){
                if(m.addedNodes[0] != undefined && m.addedNodes[0] != null){

                    if(m.addedNodes[0].className != undefined && m.addedNodes[0].className != null){

                        let newSearchItemList = $(m.addedNodes[0])
                        newSearchItemList.each(function(i){
                            let c = $($(this)[0])[0].className.split(" ");
                            if(c.includes("video-list") && videoInfo != oldVideoInfo){
                                count = 0;
                                oldVideoInfo = videoInfo;
                                videoInfo = [];
                                isLoading = true; //加载中
                                Remove("search-reload","search",newSearchItemList.children())
                            }else{
                            }

                        });
                    }
                    if(isLoading == false && count > mutationsList.length){
                        count = 0;
                        isLoading = true; //加载中
                        oldVideoInfo = videoInfo;
                        videoInfo = [];
                        Remove("search-reload","search",$(".video-item"))
                    }
                }
                count++
            });
        }
    }
    var mutationObserver = new MutationObserver(callback);
    let checkTarget = setInterval(function () {
        if(targetNode !=  undefined && targetNode !=  null){
            mutationObserver.observe(targetNode, options);
            clearInterval(checkTarget);
        }

    }, 500);
}
//选项监听
function initSearchSectionListener(){

    var targetNode = $('.video-list')[0];
    //options:监听的属性
    var options = {childList: true,attributes :true};
    //回调事件
    //console.log("init 选项监听");

    function callback(mutationsList, observer) {
        //console.log("选项监听 callback");
        oldVideoInfo = videoInfo;
        videoInfo = [];
        Remove("search","search",null);
    }
    let mutationObserver = new MutationObserver(callback);
    let checkTarget = setInterval(function () {
        if(targetNode !=  undefined && targetNode !=  null){
            mutationObserver.observe(targetNode, options);
            clearInterval(checkTarget);
        }

    }, 500);
}

//==================动态=======================
var postMode;

// 切换 全部动态/UP 监听
function initPostChangeListener(){
    let index = 0;
    var targetNode = $('section')[index];
    var options = {childList: true,attributes :true};
    //console.log("init 切换动态/UP 监听");
    function callback(mutationsList, observer) {
        //console.log("callback 全部动态/UP");
        if($(targetNode).children()[0].className == "bili-dyn-list-tabs" || $(targetNode).children()[0].className == "bili-dyn-list"){
            postMode = $(targetNode).children()[0].className
        }
        oldVideoInfo = videoInfo;
        videoInfo = [];
        setTimeout(function(){
            initPostListener()
        },500);
    }
    let mutationObserver = new MutationObserver(callback);
    let checkTarget = setInterval(function () {
        if(targetNode !=  undefined && targetNode !=  null){
            //console.log(targetNode);
            if($(targetNode).children()[0].className == "bili-dyn-list-tabs" || $(targetNode).children()[0].className == "bili-dyn-list"){
                mutationObserver.observe(targetNode, options);
                clearInterval(checkTarget);
                initPostListener();
            }
            else{
                index+=1;
                targetNode = $('section')[index];
            }
        }

    }, 50);
}


//全部/视频投稿监听
function initPostListener(){
    var targetNode = $('.bili-dyn-list__items')[0];
    var options = {childList: true,attributes :true};
    //console.log("init 动态监听");
    function callback(mutationsList, observer) {
        if(mutationsList.length >= 1 && mutationsList[0].addedNodes.length!=0 && isLoading == false){
            //console.log("动态监听 callback");
            oldVideoInfo = videoInfo;
            videoInfo = [];
            isLoading = true
            let cardList = [];
            $.each(mutationsList, function(i, m){
                cardList.push(m.addedNodes[0]);
            });
            //console.log(cardList);
            Remove("post-reload","post",cardList);
        }
        if(mutationsList.length >= 1 && mutationsList[0].addedNodes.length!=0 && isLoading == true){
            //console.log("动态监听 callback2");

            setTimeout(function(){
                oldVideoInfo = videoInfo;
                videoInfo = [];
                isLoading = true
                let cardList = [];
                $.each(mutationsList, function(i, m){
                    cardList.push(m.addedNodes[0]);
                });
                //console.log(cardList);
                Remove("post-reload","post",cardList);
            },600);
        }

        if(mutationsList.length >= 1 && mutationsList[0].removedNodes.length!=0 && isLoading == false){
            // console.log("动态监听 callback3");
            oldVideoInfo = videoInfo;
            videoInfo = [];
            isLoading = true
            setTimeout(function(){
                Remove("post","post",null);
            },500);
        }
        if(postMode == "bili-dyn-list" && isLoading == false){
            // console.log("动态监听 up");

            oldVideoInfo = videoInfo;
            videoInfo = [];
            isLoading = true
            setTimeout(function(){
                Remove("post","post",null);
            },800);
        }
    }
    let mutationObserver = new MutationObserver(callback);
    let checkTarget = setInterval(function () {
        if(targetNode !=  undefined && targetNode !=  null){
            mutationObserver.observe(targetNode, options);
            clearInterval(checkTarget);
            Remove("post","post",null);
        }

    }, 500);
}
//==================首页=======================
var insertList  = [];
var removeList  = [];
var removeCount = 0;
var home_first = false;

function initHomeListener(){
    var targetNode = $('.rcmd-box')[0];
    var options = {childList: true,attributes :true};
    //console.log("init 首页监听");
    function callback(mutationsList, observer) {
        // console.log('home_first -> '+ home_first);
        //console.log('isLoading -> '+ isLoading);

        $.each(mutationsList, function(i, m){
            if(m.addedNodes.length!=0  && isLoading == false && home_first == true)
            {
                //  console.log("callback 首页监听");
                isLoading = true;
                oldVideoInfo = videoInfo;
                videoInfo = [];
                setTimeout(function(){
                    Remove("home","home",null);
                },300);
            }
        })

    }
    let src = 'https://s2.loli.net/2022/08/04/G1YVrxT6vCsPgBW.jpg'
    let first = true
    let mutationObserver = new MutationObserver(callback);
    let checkTarget = setInterval(function () {
        if(targetNode !=  undefined && targetNode !=  null && first){
            first = false
            Remove("home","home",null);
        }
        if(home_first){
            mutationObserver.observe(targetNode, options);
            clearInterval(checkTarget);
        }
    }, 500);
}


//==================navbar====================
function initNavbarListener(){

    let index = 0;
    var targetNode = $('.video-list')[0];
    var options = {childList: true,attributes :true};
    //console.log("init Navbar监听");
    function callback(mutationsList, observer) {
        //console.log("callback Navbar监听");
        if(mutationsList.length >= 1 && mutationsList[0].addedNodes.length!=0 && isLoading == false){
            //console.log("动态监听 callback");
            oldVideoInfo = videoInfo;
            videoInfo = [];
            isLoading = true
            let cardList = [];
            $.each(mutationsList, function(i, m){
                cardList.push(m.addedNodes[0]);
            });
            //console.log(cardList);
            Remove("navbar-reload","navbar",cardList);
        }


    }
    let mutationObserver = new MutationObserver(callback);
    let checkTarget = setInterval(function () {
        if(targetNode !=  undefined && targetNode !=  null){
            //console.log(targetNode);
            mutationObserver.observe(targetNode, options);
            clearInterval(checkTarget);
            Remove("navbar","navbar",targetNode);

        }

    }, 50);
}

function initNextVideoListener(){
    var targetNode = $('#reco_list')[0]
    let checkTarget = setInterval(function () {
        if(targetNode !=  undefined && targetNode !=  null){
            let next = $(targetNode).children('.next-play')
            if (BiliBiliTagsBlocker.onlyChangeColorEnable) {
                next.css({"background":"blue"})
            }
            else
            {
                next.css({"display":"none"})
            }
            clearInterval(checkTarget);
        }

    }, 50);
}

//let checkTarget = setInterval(function () {
//console.log($('.video-list')[0]);
//}, 500);
//通过url获得BV号
function getBvcountber(video_link) {
    let bvcount = '';
    try {
        bvcount = /\/video\/(?:av|bv)(\w+)/i.exec(video_link)[1];
    } catch (e) {
        bvcount = null;
    }
    return bvcount;
}

//检查jQuery
var checkJQuery = function () {
    let jqueryCdns = [
        'http://code.jquery.com/jquery-2.1.4.min.js',
        'https://ajax.aspnetcdn.com/ajax/jquery/jquery-2.1.4.min.js',
        'https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js',
        'https://cdn.staticfile.org/jquery/2.1.4/jquery.min.js',
        'https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js',
    ];
    function isJQueryValid() {
        try {
            let wd = unsafeWindow;
            if (wd.jQuery && !wd.$) {
                wd.$ = wd.jQuery;
            }
            $();
            return true;
        } catch (exception) {
            return false;
        }
    }
    function insertJQuery(url) {
        setTimeout(function(){
            let checkJQuery = setInterval(function () {
                if(document == undefined && document != null && document.createElement('script') == undefined && document.createElement('script') != null){
                    let script = document.createElement('script');
                    script.src = url;
                    document.head.appendChild(script);
                    return script;
                    clearInterval(checkJQuery);
                }
            }, 100);
        },500);
    }
    function converProtocolIfNeeded(url) {
        let isHttps = location.href.indexOf('https://') != -1;
        let urlIsHttps = url.indexOf('https://') != -1;
        return script;

        if (isHttps && !urlIsHttps) {
            return url.replace('http://', 'https://');
        } else if (!isHttps && urlIsHttps) {
            return url.replace('https://', 'http://');
        }
        return url;
    }
    function waitAndCheckJQuery(cdnIndex, resolve) {
        if (cdnIndex >= jqueryCdns.length) {
            iLog.e('无法加载 JQuery,正在退出。');
            resolve(false);
            return;
        }
        let url = converProtocolIfNeeded(jqueryCdns[cdnIndex]);
        iLog.i('尝试第 ' + (cdnIndex + 1) + ' 个 JQuery CDN:' + url + '。');
        let script = insertJQuery(url);
        setTimeout(function () {
            if (isJQueryValid()) {
                iLog.i('已加载 JQuery。');
                resolve(true);
            } else {
                iLog.w('无法访问。');
                script.remove();
                waitAndCheckJQuery(cdnIndex + 1, resolve);
            }
        }, 100);
    }
    return new Promise(function (resolve) {
        if (isJQueryValid()) {
            iLog.i('已加载 jQuery。');
            resolve(true);
        } else {
            iLog.i('未发现 JQuery,尝试加载。');
            waitAndCheckJQuery(0, resolve);
        }
    });
}

let checkSetting = setInterval(function () {
    BiliBiliTagsBlocker = blockObj.getConfig();

    if(BiliBiliTagsBlocker.tagsArray != null){

        clearInterval(checkSetting);
    }
}, 500);

function ILog() {
    this.prefix = '';

    this.v = function (value) {
        if (level <= this.LogLevel.Verbose) {
            console.log(this.prefix + value);
        }
    }

    this.i = function (info) {
        if (level <= this.LogLevel.Info) {
            console.info(this.prefix + info);
        }
    }

    this.w = function (warning) {
        if (level <= this.LogLevel.Warning) {
            console.warn(this.prefix + warning);
        }
    }

    this.e = function (error) {
        if (level <= this.LogLevel.Error) {
            console.error(this.prefix + error);
        }
    }

    this.d = function (element) {
        if (level <= this.LogLevel.Verbose) {
            console.log(element);
        }
    }

    this.setLogLevel = function (logLevel) {
        level = logLevel;
    }

    this.LogLevel = {
        Verbose: 0,
        Info: 1,
        Warning: 2,
        Error: 3,
    };

    let level = this.LogLevel.Verbose;
}
let isCheckSetting = false;
let inChecking = false;
let matchSuccess = false;
let jqItv = setInterval(function () {
    if (inChecking) {
        return;
    }
    inChecking = true;
    checkJQuery().then(function (isLoad) {
        if (isLoad)
        {
            initSettingUI()
            if(BiliBiliTagsBlocker.functionEnable){
                console.log("已启用Tags屏蔽");
            }else{
                console.log("已关闭Tags屏蔽");
            }
            if (BiliBiliTagsBlocker.functionEnable) {
                initNavbarListener();
            }
            if (matchSearch && BiliBiliTagsBlocker.functionEnable && !matchSuccess) {
                matchSuccess = true;
                initBodyContainListener();
                initSearchListener();
                initSearchSectionListener();
                Remove("search","search",null);
            }
            if (matchPopular && BiliBiliTagsBlocker.functionEnable && !matchSuccess) {
                matchSuccess = true;
                initPopularListener()
            }
            if (matchPost && BiliBiliTagsBlocker.functionEnable && !matchSuccess) {
                matchSuccess = true;
                initPostChangeListener()

            }
            if (matchVideo && BiliBiliTagsBlocker.functionEnable && !matchSuccess) {
                matchSuccess = true;
                initVideoListener()
                if(BiliBiliTagsBlocker.removeNextVideo){
                    initNextVideoListener()
                }
            }
            if (matchHome && BiliBiliTagsBlocker.functionEnable && !matchSuccess) {
                matchSuccess = true;
                initHomeListener()
            }
            if(BiliBiliTagsBlocker.functionEnable != undefined){
                clearInterval(jqItv);
            }

        }
        inChecking = false;
    });
}, 500);
var iLog = new ILog();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址