Hide YouTube Shorts

Hides "YouTube Shorts" videos from showing in Trending, Search and Recommended on the YouTube website.

目前为 2021-12-29 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Hide YouTube Shorts
  3. // @namespace https://www.taylrr.co.uk/
  4. // @version 0.1
  5. // @description Hides "YouTube Shorts" videos from showing in Trending, Search and Recommended on the YouTube website.
  6. // @author taylor8294
  7. // @include https://www.youtube.com/feed/trending*
  8. // @include https://www.youtube.com/results*
  9. // @include https://www.youtube.com/watch*
  10. // @include https://www.youtube.com/shorts*
  11. // @icon https://i.ytimg.com/an/r0deIusKuMOsUobj89aPZA/featured_channel.jpg?v=60f4dc70
  12. // @grant none
  13. // @license GPLv3
  14. // ==/UserScript==
  15.  
  16. (function() {
  17. 'use strict';
  18.  
  19. if(window.location.pathname.toLowerCase().startsWith('/shorts/')){
  20. window.location.href = window.location.origin+'/watch?v='+window.location.pathname.replace(/^\/shorts\//g,'')+window.location.search.replace(/^\?/g,'&')
  21. } else {
  22. let removeShorts = function(){
  23. // Trending
  24. Array.from(document.querySelectorAll('a.ytd-thumbnail[href^="/shorts"]')).forEach(a => a.closest('ytd-video-renderer').remove() )
  25. Array.from(document.querySelectorAll('#video-title.ytd-video-renderer')).forEach(a => /\#shorts?/.test(a.innerText.toLowerCase()) ? a.closest('ytd-video-renderer').remove() : null)
  26. Array.from(document.querySelectorAll('#description-text.ytd-video-renderer')).forEach(yfs => /\#shorts?/.test(yfs.innerText.toLowerCase()) ? yfs.closest('ytd-video-renderer').remove() : null )
  27.  
  28. // Search
  29. Array.from(document.querySelectorAll('.title-and-badge.ytd-video-renderer')).forEach(h3 => /\#shorts?/.test(h3.innerText.toLowerCase()) ? h3.closest('ytd-video-renderer').remove() : null)
  30. Array.from(document.querySelectorAll('.metadata-snippet-container.ytd-video-renderer')).forEach(div => /\#shorts?/.test(div.innerText.toLowerCase()) ? div.closest('ytd-video-renderer').remove() : null)
  31.  
  32. // Recommended
  33. Array.from(document.querySelectorAll('#video-title.ytd-compact-video-renderer')).forEach(span => /\#shorts?/.test(span.innerText.toLowerCase()) ? span.closest('ytd-compact-video-renderer').remove() : null)
  34. }
  35.  
  36. const observer = new MutationObserver(list => {
  37. let newVideosAdded = false, i = list.length, j = 0
  38. while(i>0){
  39. j = list[i-1].addedNodes.length
  40. while(j>0){
  41. if(list[i-1].addedNodes[j-1].tagName && ['ytd-video-renderer','ytd-compact-video-renderer'].includes(list[i-1].addedNodes[j-1].tagName.toLowerCase())){
  42. newVideosAdded = true;
  43. break;
  44. }
  45. j -= 1;
  46. }
  47. if(newVideosAdded) break;
  48. i -= 1;
  49. }
  50. if(newVideosAdded) removeShorts()
  51. });
  52. observer.observe(document.body, {attributes: false, childList: true, subtree: true});
  53.  
  54. removeShorts()
  55. }
  56. })();