// ==UserScript== // @name UNMUTE KICK ON FIREFOX 100% WORKING FIX!!! // @namespace https://greasyfork.org/en/users/1200587-trilla-g // @match *://kick.com/* // @description Unmute audio for kick.com on Firefox // @grant none // @version 4.0 // @author Trilla_G // @downloadURL none // ==/UserScript== (() => { let clicked = false; // Function to change the mute button value to "vjs-vol-3" const autoChangeVolume = () => { const muteButton = document.querySelector('.vjs-mute-control.vjs-control.vjs-button.vjs-vol-0'); if (muteButton) { muteButton.click(); // Automatically click the mute button } }; // Function to observe URL changes using MutationObserver const observeUrlChanges = () => { let currentUrl = window.location.href; const observer = new MutationObserver(mutationsList => { const newUrl = window.location.href; if (newUrl !== currentUrl && newUrl.includes('kick.com')) { clicked = false; // Reset the clicked flag on URL change currentUrl = newUrl; setTimeout(autoChangeVolume, 1337); // 1.6-second delay before the click after URL change } }); // Start observing changes to the attributes of the document's body observer.observe(document.body, { attributes: true, subtree: true }); // Cleanup observer on page unload window.addEventListener('beforeunload', () => observer.disconnect()); }; // Function to check for the appearance of video element after initial load const checkForVideoElement = () => { const targetNode = document.body; const config = { childList: true, subtree: true }; const callback = function(mutationsList, observer) { for(const mutation of mutationsList) { if (mutation.type === 'childList' && mutation.addedNodes.length > 0) { mutation.addedNodes.forEach(node => { if (node.classList && node.classList.contains('vjs-tech')) { setTimeout(autoChangeVolume, 1337); // 1.6-second delay before triggering the autochangevolume function observer.disconnect(); // Disconnect observer once the video element is found } }); } } }; const observer = new MutationObserver(callback); observer.observe(targetNode, config); }; // Initial run of the script setTimeout(autoChangeVolume, 1337); // 1.6-second delay before the initial click // Start checking for the appearance of video element checkForVideoElement(); // Initial observation of URL changes observeUrlChanges(); })();