Youtube: Remove Overlays

10/30/2021, 12:35:27 AM

目前为 2021-10-29 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name Youtube: Remove Overlays
  3. // @namespace https://greasyfork.org/en/users/221281-klaufir
  4. // @match https://www.youtube.com/embed/*
  5. // @match https://www.youtube.com/watch?v=*
  6. // @grant none
  7. // @version 1.6
  8. // @author -
  9. // @description 10/30/2021, 12:35:27 AM
  10. // ==/UserScript==
  11.  
  12. function idle_waiter(wait_for_idle_ms, on_idle_callback) {
  13. // source: https://stackoverflow.com/a/47406751
  14. var action = function(o) {
  15. o.disconnect();
  16. on_idle_callback();
  17. }
  18. var resetTimer = function(changes, observer) {
  19. clearTimeout(timer);
  20. timer = setTimeout(action, wait_for_idle_ms, observer);
  21. }
  22. var observer = new MutationObserver(resetTimer);
  23. var timer = setTimeout(action, wait_for_idle_ms, observer); // wait for the page to stay still for 3 seconds
  24. observer.observe(document, {childList: true, subtree: true});
  25. }
  26.  
  27. function removeAllByClass(classes) {
  28. classes.forEach(cls => {
  29. Array.from(document.getElementsByClassName(cls)).map(e => e.remove());
  30. });
  31. }
  32.  
  33. function cleanupOverlays() {
  34. const classes = [
  35. 'ytp-paid-content-overlay', // paid promotion notification overlay in the bottom left corner
  36. 'ytp-pause-overlay', // "More Videos" overlay on paused embeds
  37. 'ytp-ce-element', // covering overlays at the end of the video
  38. 'iv-branding', // branding overlay in the bottom right corner
  39. 'ytp-cards-teaser', // info cards in the top right corner
  40. 'ytp-cards-button-icon', // info cards in the top right corner
  41. 'ytp-cards-button-title'
  42. ];
  43. removeAllByClass(classes);
  44. }
  45.  
  46. // overkill but works
  47. idle_waiter(100, cleanupOverlays);
  48. idle_waiter(500, cleanupOverlays);
  49. idle_waiter(1000, cleanupOverlays);
  50.