Disable DRC Audio on YouTube (SPA fix)

Disables DRC Audio (Stable Volume) on YouTube (Working as of November 2024)

当前为 2024-11-25 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Disable DRC Audio on YouTube (SPA fix)
  3. // @name:en Disable DRC Audio on YouTube (SPA fix)
  4. // @author The0x539 (forked from Adri)
  5. // @namespace Violentmonkey Scripts
  6. // @match https://www.youtube.com/*
  7. // @grant none
  8. // @version 0.2
  9. // @description Disables DRC Audio (Stable Volume) on YouTube (Working as of November 2024)
  10. // @license MIT
  11. // @run-at document-idle
  12. // ==/UserScript==
  13. /* jshint esversion: 11 */
  14.  
  15. function waitForElement(selector) {
  16. return new Promise((resolve, reject) => {
  17. let element = document.querySelector(selector);
  18. if (element) {
  19. resolve(element);
  20. return;
  21. }
  22.  
  23. const observer = new MutationObserver(mutations => {
  24. const element = document.querySelector(selector);
  25. if (element) {
  26. observer.disconnect();
  27. resolve(element);
  28. }
  29. });
  30. observer.observe(document.body, {
  31. childList: true,
  32. subtree: true
  33. });
  34. });
  35. }
  36.  
  37. async function disableDRC() {
  38. const menuButton = await waitForElement('.ytp-settings-button');
  39.  
  40. menuButton.click();
  41. menuButton.click();
  42.  
  43. const drcMenuItem = await waitForElement('.ytp-drc-menu-item:not([aria-disabled])');
  44.  
  45. if (drcMenuItem.getAttribute('aria-checked') === 'true') {
  46. drcMenuItem.click();
  47. console.log('Disabled DRC Audio');
  48. } else {
  49. console.log('DRC Audio is already disabled');
  50. }
  51. }
  52.  
  53. disableDRC().catch(error => console.error('Error:', error));
  54.