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