Greasy Fork

Greasy Fork is available in English.

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

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

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

您需要先安装一款用户脚本管理器扩展,例如 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.3
// @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 pushState 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 bili-bangumi-card__cover');
        for (let i =0; i < front_imgs2.length; i++){
            front_imgs2[i].addEventListener('click', function (event) {
                event.stopPropagation();
            }, true)
        };
        let front_imgs3 = document.getElementsByClassName('v-img bili-video-card__cover');
        for (let i =0; i < front_imgs3.length; i++){
            front_imgs3[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 next_videos = document.getElementsByClassName('box-a');
        let videos = document.getElementsByClassName('video-awesome-img');
        let links = document.getElementsByTagName('a');
        for (let i = 0; i < next_videos.length; i++){
            let url = next_videos[i].href;
            // https://www.bilibili.com/video/BV1pP4y1B7cf/?spm_id_from=000.000.recommend_more_video.-1
            // Removing strings after "?"
            let index = url.indexOf(index_string_qm);
            let left_url = url.substring(0,index); // https://www.bilibili.com/video/BV1pP4y1B7cf
            // let right_url = url.substring(index + 1, url.length); // spm_id_from=000.000.recommend_more_video.-1
            next_videos[i].href = left_url;
            // videos[i].href = url.slice(0, -44);
        };
        for (let i = 0; i < videos.length; i++){
            let url = videos[i].href;
            let index = url.indexOf(index_string_qm);
            let left_url = url.substring(0,index);
            videos[i].href = left_url;
        };
        for (let i = 0; i < links.length; i++){
            let url = links[i].href;
            let index = url.indexOf(index_string_qm);
            let left_url = url.substring(0,index);
            links[i].href = left_url;
        };
     };
     // 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);
        let clean_url = links[i].href.substring(0, index-1);
        links[i].href = clean_url;
    }
}


// Handle different sites
window.onload = () => {
    // bilibili
    if (location.hostname.includes('bilibili.com')) {
        // Restore pushState session stack
        if (window.location.href.includes(index_string_b1)) {
            restoreState(index_string_b1);
        } else if (window.location.href.includes(index_string_b2)) {
            restoreState(index_string_b2);
        }
        if (window.location.href.includes('bilibili.com/video')){
            setTimeout(() => {cleanSpaceURL()}, 1000);
            setTimeout(() => {cleanVideoURL()}, time_delay);
        } else if (window.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 = () => {}