Greasy Fork

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

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

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

// ==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.6
// @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==

/*
# Changelog

v0.3.6 2022.12.28
Optimise Baidu related search URL, paging URL processing method.

v0.3.5 2022.12.27
Script logic optimisations.


*/
(function () {
    // const sites = ['bilibili', 'baidu.com', 'youtube.com'];
    const time_delay = 4000;
    const index_string_qm = "?";
    // bilibili index strings
    const index_string_b1 = "spm_id_from";
    const index_string_b2 = "vd_source";
    // baidu index strings
    const index_string_bd1 = "rsf";
    const index_string_bd2 = "rsv_pq";

    // Bilibili Restore history state 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.replaceState({}, "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 State 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() {
        function cleanRS() {
            // <a> class = "c-color-link"
            let links = document.getElementsByClassName('c-color-link');
            for (let i = 0; i < links.length; i++) {
                if (links[i].href.includes(index_string_bd1)) {
                    let index = links[i].href.indexOf(index_string_bd1);
                    links[i].href = links[i].href.substring(0, index - 1);
                }
            }
        }
        // bottom of html paging block
        function clearPages() {
            let page_links = document.getElementById('page').getElementsByTagName('div')[0].getElementsByTagName('a');
            for (let i = 0; i < page_links.length; i++) {
                if (page_links[i].href.includes(index_string_bd2)) {
                    let index = page_links[i].href.indexOf(index_string_bd2);
                    page_links[i].href = page_links[i].href.substring(0, index - 1);
                }
            }
        }
        window.onscroll = () => {
            var scroll_top = 0;
            let scroll = document.documentElement.scrollTop || document.body.scrollTop;
            if (scroll - scroll_top > 200) {
                cleanRS();
                clearPages();
                scroll_top = scroll;
            }
        }
    }


    // Handle different sites
    window.onload = () => {
        // bilibili
        if (location.hostname.includes('bilibili.com')) {
            // Restore history state 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);
                restoreState(index_string_b2);
            } 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();
        }
    }
})();

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