Removes the annoying carousel on the twitch.tv homepage
当前为
// ==UserScript==
// @name Remove Carousel on twitch.tv home page
// @namespace KrümelKing
// @version 1.0
// @description Removes the annoying carousel on the twitch.tv homepage
// @author https://linktr.ee/kruemelking
// @match https://www.twitch.tv/
// @grant none
// @run-at document-start
// @license MIT
// ==/UserScript==
(function() {
'use strict';
//Check for homepage
if (window.location.pathname !== '/') {
return;
}
function aggressivelyRemoveCarouselAndAudio() {
const carousel = document.querySelector('.front-page-carousel');
if (carousel) {
carousel.style.display = 'none';
//Disables all video and audio elements on startpage if found
function disableMediaElements(element) {
if (element.tagName === 'VIDEO' || element.tagName === 'AUDIO') {
element.muted = true;
element.volume = 0;
element.removeAttribute('src');
element.load();
element.pause();
element.style.display = 'none';
}
for (let child of element.children) {
disableMediaElements(child);
}
}
disableMediaElements(carousel);
//Overwrite play method
carousel.querySelectorAll('video, audio').forEach(mediaElement => {
mediaElement.play = function() {
this.pause();
return new Promise(() => {});
};
});
}
}
//creates observer
const observer = new MutationObserver((mutations) => {
for (let mutation of mutations) {
if (mutation.addedNodes.length) {
aggressivelyRemoveCarouselAndAudio();
}
}
});
//Observer checks for changes
const config = { childList: true, subtree: true };
//Immediate execution so no short noise
function immediateAndRepeatedExecution() {
aggressivelyRemoveCarouselAndAudio();
observer.observe(document.body, config);
//Sometimes it reloads so do it multiple times
for (let i = 1; i <= 5; i++) {
setTimeout(aggressivelyRemoveCarouselAndAudio, i * 100);
}
}
//yeah do it a lot
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', immediateAndRepeatedExecution);
} else {
immediateAndRepeatedExecution();
}
//and on load
window.addEventListener('load', aggressivelyRemoveCarouselAndAudio);
})();