Greasy Fork is available in English.
净化B站推荐视频跟踪链接,目前处理页面:B站主页,热门/排行榜,视频播放页
当前为
// ==UserScript==
// @name 净化B站跟踪链接(推荐视频)
// @name:zh-TW 凈化B站鏈接跟蹤(推薦視頻)
// @name:en Clean Bilibili Tracking URLs (Recommended Videos)
// @namespace http://greasyfork.icu/
// @version 0.3
// @description 净化B站推荐视频跟踪链接,目前处理页面:B站主页,热门/排行榜,视频播放页
// @description:zh-tw 淨化推薦視頻跟蹤鏈接
// @description:en Clean urls those can tracking you, effective page: bilibili home page, populay/rank page, videos page.
// @author cilxe
// @match *://www.bilibili.com/*
// @match *://www.bilibili.com/video/av*
// @match *://www.bilibili.com/video/BV*
// @icon https://www.bilibili.com/favicon.ico
// @grant none
// @license MIT
// ==/UserScript==
const sites = ['bilibili', 'youtube'];
const delay_time = 4000;
const index_string = "spm_id_from";
// www.bilibili.co/*, ww.bilibili.com/v/popular/*
function cleanMainURL() {
function onFresh() {
const prefix_meta = document.createElement('meta');
prefix_meta.name = "spm_prefix";
prefix_meta.content = "000.0000";
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 index_string = "spm_id_from";
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);
let left_url = url.substring(0,index-1);
let url2 = scroll_videos_2[i].getAttribute('data-target-url');
let index2 = url2.indexOf(index_string);
let left_url2 = url2.substring(0,index2);
if (url.includes(index_string) || url2.includes(index_string)) {
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)
// };
}
// 加载慢,延时执行
setTimeout(() => {
onFresh();
}, 4000);
// 滚动重复执行
window.onscroll = () => {
var scroll_top = 0;
// 滚动高度
let scroll = document.documentElement.scrollTop || document.body.scrollTop;
if (scroll - scroll_top > 200) {
onFresh();
scroll_top = scroll;
}
}
}
// www.bilibili.com/video/*
function cleanVideoURL() {
setTimeout(() => {
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
// 删除问号及之后的字符
let index = url.indexOf(index_string);
let left_url = url.substring(0,index-1); // 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);
let left_url = url.substring(0,index-1);
videos[i].href = left_url;
};
for (let i = 0; i < links.length; i++){
let url = links[i].href;
let index = url.indexOf(index_string);
let left_url = url.substring(0,index-1);
links[i].href = left_url;
};
};
cleanURL();
let unfold_videos = document.getElementsByClassName('rec-footer');
unfold_videos[0].onclick = () => {
cleanURL();
}
}, delay_time);}
// Handle different sites
if (location.hostname.includes('bilibili.com')) {
if (window.location.href.includes('bilibili.com/video/')){
// www.bilibili.com/video/*
cleanVideoURL();
} else {
cleanMainURL();
}
}
// fuintion declaration methods:
// function functionName() {}; window.onload = functionName()
// window.onload = function() {}
// window.onload = () => {}