Greasy Fork

净化B站跟踪链接(推荐视频),百度相关搜索链接净化

净化B站推荐视频跟踪链接,百度相关搜索链接净化

目前为 2022-12-23 提交的版本。查看 最新版本

// ==UserScript==
// @name         净化B站跟踪链接(推荐视频),百度相关搜索链接净化
// @name:zh-TW   凈化B站鏈接跟蹤(推薦視頻),百度相關搜索鏈接凈化
// @name:en      Clean Bilibili Tracking URLs (Recommended Videos), Baidu <Related Search> URLs.
// @namespace    https://greasyfork.org/
// @version      0.3.4
// @description  净化B站推荐视频跟踪链接,百度相关搜索链接净化
// @description:zh-tw 淨化B站推薦視頻跟蹤鏈接,百度相關搜索鏈接凈化
// @description:en Clean urls those can tracking you, effective sites:bilibili, Baidu
// @author       cilxe
// @match        *://www.bilibili.com/*
// @match        *://space.bilibili.com/*
// @match        *://www.baidu.com/s*
// @icon         https://www.bilibili.com/favicon.ico
// @run-at       document-start
// @license      MIT
// ==/UserScript==

// const sites = ['bilibili', 'baidu.com', 'youtube.com'];
const time_delay = 4000;
const index_string_b1 = "spm_id_from";
const index_string_b2 = "vd_source";
const index_string_qm = "?";
// baidu related search index string
const index_string_bd = "rsf";

// Bilibili Restore session stack
function restoreState(indexStr){
    let cur_url = window.location.href;
    let video_index = cur_url.indexOf(indexStr);
    let clean_url = cur_url.substring(0, video_index-1);
    window.history.pushState({}, "Restore", clean_url);
}

// space.bilibili.com/*
function cleanSpaceURL(){
    let links_cover = document.getElementsByClassName('cover');
    let links_title = document.getElementsByClassName('title');
    for (let i = 0; i < links_cover.length; i++) {
        links_cover[i].addEventListener('click', function (event) {
            event.stopPropagation();
        }, true)

    }
    for (let i = 0; i < links_title.length; i++) {
        links_title[i].addEventListener('click', function (event) {
            event.stopPropagation();
        }, true)
    }
}

// www.bilibili.co/*, ww.bilibili.com/v/popular/*
function cleanMainURL() {
    function onFresh() {
        let metas = document.getElementsByTagName('meta');
        for (let i = 0; i < metas.length; i++){
            if (metas[i].name == "spm_prefix") {
                metas[i].content = "000.0000";
            }
        };
        // 净化滚动卡片链接
        let scroll_videos_1 = document.getElementsByClassName('carousel-inner');
        let scroll_videos_2 = document.getElementsByClassName('carousel-item');
        for (let i =0; i < scroll_videos_1.length; i++){
            scroll_videos_1[i].addEventListener('click', function (event) {
                event.stopPropagation();
            }, true)
        };
        for (let i =0; i < scroll_videos_2.length; i++){
            let url = scroll_videos_2[i].href;
            let index = url.indexOf(index_string_b1);
            let left_url = url.substring(0,index-1);
            let url2 = scroll_videos_2[i].getAttribute('data-target-url');
            let index2 = url2.indexOf(index_string_b1);
            let left_url2 = url2.substring(0,index2);
            if (url.includes(index_string_b1) || url2.includes(index_string_b1)) {
                scroll_videos_2[i].href = left_url;
                scroll_videos_2[i].setAttribute('data-target-url', left_url2);
            };
        };
        // Remove tracking event
        let front_rec_videos = document.getElementsByClassName('recommended-card');
        for (let i =0; i < front_rec_videos.length; i++){
            front_rec_videos[i].addEventListener('click', function (event) {
                event.stopPropagation();
            }, true)
        };
        let front_rec_videos2 = document.getElementsByClassName('bili-video-card__image--wrap');
        for (let i =0; i < front_rec_videos2.length; i++){
            front_rec_videos2[i].addEventListener('click', function (event) {
                event.stopPropagation();
            }, true)
        };
        // // 排行榜视频封面
        // let videos_cards = document.getElementsByClassName('video-card__content');
        // for (let i =0; i < videos_cards.length; i++){
        //     videos_cards[i].addEventListener('click', function (event) {
        //         event.stopPropagation();
        //     }, true)
        // };
        // 视频封面事件
        let links = document.getElementsByTagName('a');
        for (let i =0; i < links.length; i++){
            links[i].addEventListener('click', function (event) {
                event.stopPropagation();
            }, true)
        };
        let front_imgs0 = document.getElementsByTagName('img');
        for (let i =0; i < front_imgs0.length; i++){
            front_imgs0[i].addEventListener('click', function (event) {
                event.stopPropagation();
            }, true)
        };
        let front_imgs = document.getElementsByTagName('picture');
        for (let i =0; i < front_imgs.length; i++){
            front_imgs[i].addEventListener('click', function (event) {
                event.stopPropagation();
            }, true)
        };
        // v-img bili-bangumi-card__cover  v-img bili-video-card__cover
        let front_imgs2 = document.getElementsByClassName('v-img');
        for (let i =0; i < front_imgs2.length; i++){
            front_imgs2[i].addEventListener('click', function (event) {
                event.stopPropagation();
            }, true)
        };
        // watch-later van-watchlater black
        let after_videos = document.getElementsByClassName('watch-later');
        for (let i =0; i < after_videos.length; i++){
            after_videos[i].addEventListener('click', function (event) {
                event.stopPropagation();
            }, true)
        };
        // 排行榜页视频标题事件
        // let video_titles = document.getElementsByClassName('video-card__info');
        // for (let i =0; i < video_titles.length; i++){
        //     video_titles[i].addEventListener('click', function (event) {
        //         event.stopPropagation();
        //     }, true)
        // };
    }
    // In case of page loading incomplete, add time out.
    setTimeout(() => {
        onFresh();
    }, time_delay);
    // Loop execution while scrolling
    window.onscroll = () => {
        var scroll_top = 0;
        // Scroll range
        let scroll = document.documentElement.scrollTop || document.body.scrollTop;
        if (scroll - scroll_top > 200) {
            onFresh();
            scroll_top = scroll;
        }
    }
}

// www.bilibili.com/video/*
function cleanVideoURL() {
     function cleanURL(){
        let links = document.getElementsByTagName('a');
        let videos = document.getElementsByClassName('video-awesome-img');
        for (let i = 0; i < links.length; i++){
            let url = links[i].href;
            let index = url.indexOf(index_string_qm);
            if (links[i].href.includes(index_string_b1)) {
                links[i].href = url.substring(0,index);
            }
        };
        for (let i = 0; i < videos.length; i++){
            videos[i].addEventListener('click', function (event) {
                event.stopPropagation();
            }, true)
            // let url = videos[i].href;
            // let index = url.indexOf(index_string_qm);
            // videos[i].href = url.substring(0,index);
        };
     };
    // Restore pushState session
    restoreState(index_string_b2);
    cleanURL();
    let unfold_videos = document.getElementsByClassName('rec-footer');
    unfold_videos[0].onclick = () => {
        cleanURL();
    };
}



// Baidu related search URL cleaning
function cleanBaiduRelatedURL() {
    // index_string_bd
    // <a> class = "c-color-link"
    let links = document.getElementsByClassName('c-color-link');
    for (let i=0; i < links.length; i++) {
        let index = links[i].href.indexOf(index_string_bd);
        links[i].href = links[i].href.substring(0, index-1);
    }
}


// Handle different sites
window.onload = () => {
    // bilibili
    if (location.hostname.includes('bilibili.com')) {
        // Restore pushState session stack
        if (location.href.includes(index_string_b1)) {
            restoreState(index_string_b1);
        } else if (location.href.includes(index_string_b2)) {
            restoreState(index_string_b2);
        }
        if (location.href.includes('bilibili.com/video')){
            setTimeout(() => {cleanVideoURL()}, 500);
            setTimeout(() => {cleanVideoURL()}, time_delay);
            restoreState(index_string_b1);
        } else if (location.href.includes('space.bilibili.com')) {
            setTimeout(() => {cleanSpaceURL()}, 1000);
            setTimeout(() => {cleanSpaceURL()}, time_delay);
        } else {
            cleanMainURL();
        } // baidu <related search>
     } else if (location.hostname.includes('baidu.com')) {
        cleanBaiduRelatedURL();
     }
}


// fuintion  declaration  methods:
// function functionName() {};  window.onload = functionName()
// window.onload = function() {}
// window.onload = () => {}