Auto show more for YouTube

This plugin press "Show more" button when display it on your browser by scroll.

当前为 2019-02-03 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Auto show more for YouTube
  3. // @name:ja YouTubeの「もっと見る」ボタンを自動で押す
  4. // @description This plugin press "Show more" button when display it on your browser by scroll.
  5. // @description:ja YouTube.comの「もっと見る」ボタンが、スクロールによって画面に表示された瞬間、自動で押されます。
  6. // @namespace https://twitter.com/sititou70
  7. // @license MIT
  8. // @include /https*:\/\/www\.youtube\.com\/.*/
  9. // @version 2.1.0
  10. // @grant none
  11. // ==/UserScript==
  12.  
  13. //settings
  14. let scroll_event_interval = 100;
  15. const adjust_scroll_px = 0;
  16. const targets = [
  17. {
  18. name: "Comment show more button",
  19. selector: "ytd-expander.ytd-comment-replies-renderer > paper-button#more",
  20. },
  21. {
  22. name: "Watch more related button",
  23. selector: "yt-next-continuation.ytd-watch-next-secondary-results-renderer > paper-button",
  24. },
  25. {
  26. name: "Video info show more button",
  27. selector: "ytd-expander.style-scope.ytd-video-secondary-info-renderer > paper-button#more",
  28. },
  29. ];
  30.  
  31. //global variables
  32. let clicked_buttons = [];
  33.  
  34. //utils
  35. const user_agent = window.navigator.userAgent.toLowerCase();
  36. const fireClickEvent = (elem) => {
  37. if( user_agent.match(/(msie|MSIE)/) || user_agent.match(/(T|t)rident/) ) {
  38. elem.fireEvent("onclick");
  39. } else {
  40. const event = document.createEvent("MouseEvents");
  41. event.initEvent("click", true, true);
  42. elem.dispatchEvent(event);
  43. }
  44. };
  45.  
  46. const getTargetButtons = () =>{
  47. return targets
  48. .map(x => document.querySelectorAll(x.selector))
  49. .reduce((s, x) => [...s, ...x]);
  50. };
  51.  
  52. //events
  53. let waiting_for_scroll_event_interval = false;
  54. document.addEventListener("scroll", function(){
  55. if(waiting_for_scroll_event_interval)return;
  56. waiting_for_scroll_event_interval = true;
  57. setTimeout(() => waiting_for_scroll_event_interval = false, scroll_event_interval);
  58.  
  59. getTargetButtons().forEach(x => {
  60. if(clicked_buttons.includes(x))return;
  61.  
  62. if(x.getBoundingClientRect().y - window.innerHeight + adjust_scroll_px < 0){
  63. clicked_buttons.push(x);
  64. fireClickEvent(x);
  65.  
  66. //highlight clicked button for debugging
  67. //x.style.border = "1px solid #f00";
  68. }
  69. });
  70. });
  71.  
  72. document.addEventListener("click", function(e){
  73. let target = e.target;
  74. while(target !== document.body){
  75. if(target.tagName === "A"){
  76. clicked_buttons = [];
  77. return;
  78. }
  79. target = target.parentElement;
  80. }
  81. });