// ==UserScript== // @name 净化B站跟踪链接(推荐视频) // @name:zh-TW 凈化B站鏈接跟蹤(推薦視頻) // @name:en Clean Bilibili Tracking URLs (Recommended Videos) // @namespace https://greasyfork.org/ // @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 // @downloadURL none // ==/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 = () => {}