// ==UserScript==
// @name 隐藏b站视频详情页右侧的"活动推广"和"大家围观的直播",评论区和视频简介之间的广告,弹幕下方的广告
// @name:en Hide the promotion on the right side of Bilibili's video details page
// @namespace http://tampermonkey.net/
// @version 0.1.10
// @description Hide specified Bilibili elements using MutationObserver
// @description:en Hide specified Bilibili elements using MutationObserver
// @author aspen138
// @match *://www.bilibili.com/video/*
// @icon https://www.bilibili.com/favicon.ico
// @grant none
// @license MIT
// @downloadURL none
// ==/UserScript==
(function() {
'use strict';
// Function to change the specified elements' background to white, prevent clicks, and disable hover effects
function whiteOutElements() {
var adBanner = document.getElementById('right-bottom-banner');
var liveCard = document.querySelector('.pop-live-small-mode.part-1');
var adFloorCover = document.querySelector('.ad-floor-cover.b-img'); // Select the additional element
var bannerAd = document.getElementById('bannerAd'); // Select the element with id="bannerAd"
var vcdElement = document.querySelector('.vcd'); // Select the element with the class 'vcd'
var adLinkElement = document.querySelector('a[data-loc-id="4331"]'); // Select the element using the specific data-loc-id attribute
var activityVote = document.getElementById('activity_vote'); // Select the 'activity_vote' element by ID
const preventClicksAndHideElementStyles = (element) => {
element.style.background = 'white';
element.style.color = 'white'; // Hides text
element.style.pointerEvents = 'none'; // Disables mouse events including hover and clicks
// Hide children elements by iterating through them
Array.from(element.children).forEach(child => {
child.style.visibility = 'hidden';
preventClicksAndHideElementStyles(child); // Apply recursively to child elements
});
};
if (adBanner) {
preventClicksAndHideElementStyles(adBanner);
}
if (liveCard) {
preventClicksAndHideElementStyles(liveCard);
}
if (adFloorCover) { // Apply to the additional element
preventClicksAndHideElementStyles(adFloorCover);
}
if (bannerAd) { // Apply to the element
preventClicksAndHideElementStyles(bannerAd);
}
if (vcdElement) { // Apply to the 'vcd' class element
preventClicksAndHideElementStyles(vcdElement);
}
if (adLinkElement) { // Apply to the new element
preventClicksAndHideElementStyles(adLinkElement);
}
if (activityVote) { // Apply to the 'activity_vote' element
preventClicksAndHideElementStyles(activityVote);
}
// Hide the new element
if (document.getElementById('slide_ad')) {
preventClicksAndHideElementStyles(document.getElementById('slide_ad'));
}
}
// Function to remove a specified element by its class name
function removeElementByClassName(className) {
var elements = document.getElementsByClassName(className);
Array.from(elements).forEach(element => {
element.remove();
});
}
// Function to remove a specified element by its ID
function removeElementById(elementId) {
var element = document.getElementById(elementId);
if (element) {
element.remove();
}
}
// Create a MutationObserver to watch for changes in the DOM
var observer = new MutationObserver(function(mutationsList) {
for (var mutation of mutationsList) {
if (mutation.type === 'childList') {
whiteOutElements(); // Apply changes when new nodes are added
removeElementById('activity_vote'); // Remove the 'activity_vote' element when new nodes are added
}
}
});
observer.observe(document.body, { childList: true, subtree: true });
// Initial application of the changes
whiteOutElements();
setTimeout(whiteOutElements, 5 * 1000);
removeElementById('activity_vote'); // Remove the 'activity_vote' element initially
setTimeout(()=>{removeElementByClassName('ad-report video-card-ad-small');}, 5*1000);
})();