Greasy Fork

Greasy Fork is available in English.

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

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

当前为 2022-12-28 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         净化B站跟踪链接(推荐视频),百度<相关搜索>链接净化
// @name:zh-TW   凈化B站鏈接跟蹤(推薦視頻),百度<相關搜索>鏈接凈化
// @name:en      Clean Bilibili Tracking URLs (Recommended Videos), Baidu <Related Search> URLs.
// @namespace    http://greasyfork.icu/
// @version      0.3.5
// @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.5 2022.12.27
Bug fixes, Script logic optimisations.


*/

// 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 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() {
    // 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 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 = () => {}