红狐弹幕解析+自动播放

红狐弹幕解析和自动播放整合版

目前为 2025-02-12 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name 红狐弹幕解析+自动播放
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.3
  5. // @description 红狐弹幕解析和自动播放整合版
  6. // @author Aomine
  7. // @match *.rdfplayer.mrgaocloud.com/*
  8. // @match *:rdfplayer.mrgaocloud.com/player/*
  9. // @match *v.qq.com/x*
  10. // @match *v.qq.com/p*
  11. // @match *v.qq.com/cover*
  12. // @match *v.qq.com/tv/*
  13. // @match *.youku.com/v*
  14. // @match *m.youku.com/*
  15. // @match *.iqiyi.com/v_*
  16. // @match *.iqiyi.com/w_*
  17. // @match *.iqiyi.com/a_*
  18. // @match *.iq.com/play/*
  19. // @match *.bilibili.com/video/*
  20. // @match *.bilibili.com/anime/*
  21. // @match *.bilibili.com/bangumi/play/*
  22. // @match *.bilibili.com/s/*
  23. // @match *.pptv.com/show/*
  24. // @match *.acfun.cn/*
  25. // @license GPL License
  26. // @icon data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PgoNPCEtLSBVcGxvYWRlZCB0bzogU1ZHIFJlcG8sIHd3dy5zdmdyZXBvLmNvbSwgR2VuZXJhdG9yOiBTVkcgUmVwbyBNaXhlciBUb29scyAtLT4KPHN2ZyB3aWR0aD0iODAwcHgiIGhlaWdodD0iODAwcHgiIHZpZXdCb3g9IjAgMCA5MSA5MSIgaWQ9IkxheWVyXzEiIHZlcnNpb249IjEuMSIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+Cg08c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDojNEU3QTlFO30NCgkuc3Qxe2ZpbGw6I0YwQURBQjt9DQo8L3N0eWxlPgoNPGc+Cg08Zz4KDTxnPgoNPHBhdGggY2xhc3M9InN0MCIgZD0iTTU1LjQsNTMuNmMyLjEtMi4xLDMuMi00LjgsMS43LThjLTIuMy00LjctMTAuMy01LjUtMTMuMy0xLjNjLTAuNiwwLjgsMC4xLDEuOCwwLjgsMi4xICAgICBjMi4zLDAuOCw1LjMtMSw3LjQsMC40YzMuNiwyLjMtMC44LDUuMi0zLjIsNS45Yy0yLjcsMC44LTEuNiw0LjksMS4yLDQuMmMzLjctMC45LDYuMSwyLjgsNC40LDZjLTEuNywzLTUuMywzLjItOCwxLjcgICAgIGMtMy43LTItOC4xLDMuMS00LjYsNmMyLjgsMi40LDcuNiwxLjcsMTAuOCwwLjNjMy4xLTEuNCw1LjctNCw2LjYtNy40QzYwLjEsNTkuNiw1OC40LDU1LjYsNTUuNCw1My42eiIvPgoNPHBhdGggY2xhc3M9InN0MCIgZD0iTTMzLjIsMjAuOWMtMi44LDEuNS01LjEsMy45LTcuMSw2LjRjLTIuNC0zLjEtNS42LTYuMi05LjMtNi4zYy0xLjcsMC0yLjUsMi4xLTEuMywzLjJjMi45LDMsNiw1LjMsOC4zLDguOSAgICAgYzEuMSwxLjgsMy40LDEuNiw0LjYsMGMyLjMtMy4xLDUuMy01LjMsOC4zLTcuOEMzOS4xLDIzLjIsMzUuOSwxOS40LDMzLjIsMjAuOXoiLz4KDTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik03MS45LDIxLjdjLTIuOCwxLjUtNS4xLDMuOS03LjEsNi40Yy0yLjQtMy4xLTUuNi02LjItOS4zLTYuM2MtMS43LDAtMi41LDIuMS0xLjMsMy4yYzIuOSwzLDYsNS4zLDguMyw4LjkgICAgIGMxLjEsMS44LDMuNCwxLjYsNC42LDBjMi4zLTMuMSw1LjMtNS4zLDguMy03LjhDNzcuOSwyNCw3NC43LDIwLjIsNzEuOSwyMS43eiIvPgoNPC9nPgoNPHBhdGggY2xhc3M9InN0MSIgZD0iTTEwLjQsNTIuMWMxLjQtMS40LDIuOC0yLjcsNC4yLTQuMWMxLjQtMS40LDMuNC0yLjcsMy40LTQuOGMwLTEuMi0xLTIuMi0yLjItMi4yYy0yLjMsMC4xLTMuNSwyLjItNC44LDMuOCAgICBjLTEuMiwxLjYtMi4yLDMuNS0zLjIsNS4zQzcuMSw1MS43LDkuMSw1My41LDEwLjQsNTIuMUwxMC40LDUyLjF6Ii8+Cg08cGF0aCBjbGFzcz0ic3QxIiBkPSJNMjEuMiw1Mi44YzEuNC0xLjEsMi44LTIuMiw0LjItMy4zYzEuMy0xLjEsMy4xLTIuMiwzLjgtMy44YzEtMi4yLTEuMS00LjktMy41LTMuNWMtMS43LDAuOS0yLjYsMi45LTMuNiw0LjQgICAgYy0xLDEuNS0yLDMuMS0yLjksNC43QzE4LjMsNTIuNSwyMC4xLDUzLjYsMjEuMiw1Mi44TDIxLjIsNTIuOHoiLz4KDTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik02NS42LDUyLjFjMS40LTEuNCwyLjgtMi43LDQuMi00LjFjMS40LTEuNCwzLjQtMi43LDMuNC00LjhjMC0xLjItMS0yLjItMi4yLTIuMmMtMi4zLDAuMS0zLjUsMi4yLTQuOCwzLjggICAgYy0xLjIsMS42LTIuMiwzLjUtMy4yLDUuM0M2Mi4zLDUxLjcsNjQuMyw1My41LDY1LjYsNTIuMUw2NS42LDUyLjF6Ii8+Cg08cGF0aCBjbGFzcz0ic3QxIiBkPSJNNzYuNCw1Mi44YzEuNC0xLjEsMi44LTIuMiw0LjItMy4zYzEuMy0xLjEsMy4xLTIuMiwzLjgtMy44YzEtMi4yLTEuMS00LjktMy41LTMuNWMtMS43LDAuOS0yLjYsMi45LTMuNiw0LjQgICAgYy0xLDEuNS0yLDMuMS0yLjksNC43QzczLjUsNTIuNSw3NS4zLDUzLjYsNzYuNCw1Mi44TDc2LjQsNTIuOHoiLz4KDTwvZz4KDTwvZz4KDTwvc3ZnPg==
  27. // @grant none
  28. // ==/UserScript==
  29.  
  30. (function() {
  31. 'use strict';
  32.  
  33. // 弹幕解析功能(第一个脚本内容)
  34. var am = false;
  35. var moving = false;
  36. var logo = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PgoNPCEtLSBVcGxvYWRlZCB0bzogU1ZHIFJlcG8sIHd3dy5zdmdyZXBvLmNvbSwgR2VuZXJhdG9yOiBTVkcgUmVwbyBNaXhlciBUb29scyAtLT4KPHN2ZyB3aWR0aD0iODAwcHgiIGhlaWdodD0iODAwcHgiIHZpZXdCb3g9IjAgMCA5MSA5MSIgaWQ9IkxheWVyXzEiIHZlcnNpb249IjEuMSIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+Cg08c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDojNEU3QTlFO30NCgkuc3Qxe2ZpbGw6I0YwQURBQjt9DQo8L3N0eWxlPgoNPGc+Cg08Zz4KDTxnPgoNPHBhdGggY2xhc3M9InN0MCIgZD0iTTU1LjQsNTMuNmMyLjEtMi4xLDMuMi00LjgsMS43LThjLTIuMy00LjctMTAuMy01LjUtMTMuMy0xLjNjLTAuNiwwLjgsMC4xLDEuOCwwLjgsMi4xICAgICBjMi4zLDAuOCw1LjMtMSw3LjQsMC40YzMuNiwyLjMtMC44LDUuMi0zLjIsNS45Yy0yLjcsMC44LTEuNiw0LjksMS4yLDQuMmMzLjctMC45LDYuMSwyLjgsNC40LDZjLTEuNywzLTUuMywzLjItOCwxLjcgICAgIGMtMy43LTItOC4xLDMuMS00LjYsNmMyLjgsMi40LDcuNiwxLjcsMTAuOCwwLjNjMy4xLTEuNCw1LjctNCw2LjYtNy40QzYwLjEsNTkuNiw1OC40LDU1LjYsNTUuNCw1My42eiIvPgoNPHBhdGggY2xhc3M9InN0MCIgZD0iTTMzLjIsMjAuOWMtMi44LDEuNS01LjEsMy45LTcuMSw2LjRjLTIuNC0zLjEtNS42LTYuMi05LjMtNi4zYy0xLjcsMC0yLjUsMi4xLTEuMywzLjJjMi45LDMsNiw1LjMsOC4zLDguOSAgICAgYzEuMSwxLjgsMy40LDEuNiw0LjYsMGMyLjMtMy4xLDUuMy01LjMsOC4zLTcuOEMzOS4xLDIzLjIsMzUuOSwxOS40LDMzLjIsMjAuOXoiLz4KDTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik03MS45LDIxLjdjLTIuOCwxLjUtNS4xLDMuOS03LjEsNi40Yy0yLjQtMy4xLTUuNi02LjItOS4zLTYuM2MtMS43LDAtMi41LDIuMS0xLjMsMy4yYzIuOSwzLDYsNS4zLDguMyw4LjkgICAgIGMxLjEsMS44LDMuNCwxLjYsNC42LDBjMi4zLTMuMSw1LjMtNS4zLDguMy03LjhDNzcuOSwyNCw3NC43LDIwLjIsNzEuOSwyMS43eiIvPgoNPC9nPgoNPHBhdGggY2xhc3M9InN0MSIgZD0iTTEwLjQsNTIuMWMxLjQtMS40LDIuOC0yLjcsNC4yLTQuMWMxLjQtMS40LDMuNC0yLjcsMy40LTQuOGMwLTEuMi0xLTIuMi0yLjItMi4yYy0yLjMsMC4xLTMuNSwyLjItNC44LDMuOCAgICBjLTEuMiwxLjYtMi4yLDMuNS0zLjIsNS4zQzcuMSw1MS43LDkuMSw1My41LDEwLjQsNTIuMUwxMC40LDUyLjF6Ii8+Cg08cGF0aCBjbGFzcz0ic3QxIiBkPSJNMjEuMiw1Mi44YzEuNC0xLjEsMi44LTIuMiw0LjItMy4zYzEuMy0xLjEsMy4xLTIuMiwzLjgtMy44YzEtMi4yLTEuMS00LjktMy41LTMuNWMtMS43LDAuOS0yLjYsMi45LTMuNiw0LjQgICAgYy0xLDEuNS0yLDMuMS0yLjksNC43QzE4LjMsNTIuNSwyMC4xLDUzLjYsMjEuMiw1Mi44TDIxLjIsNTIuOHoiLz4KDTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik02NS42LDUyLjFjMS40LTEuNCwyLjgtMi43LDQuMi00LjFjMS40LTEuNCwzLjQtMi43LDMuNC00LjhjMC0xLjItMS0yLjItMi4yLTIuMmMtMi4zLDAuMS0zLjUsMi4yLTQuOCwzLjggICAgYy0xLjIsMS42LTIuMiwzLjUtMy4yLDUuM0M2Mi4zLDUxLjcsNjQuMyw1My41LDY1LjYsNTIuMUw2NS42LDUyLjF6Ii8+Cg08cGF0aCBjbGFzcz0ic3QxIiBkPSJNNzYuNCw1Mi44YzEuNC0xLjEsMi44LTIuMiw0LjItMy4zYzEuMy0xLjEsMy4xLTIuMiwzLjgtMy44YzEtMi4yLTEuMS00LjktMy41LTMuNWMtMS43LDAuOS0yLjYsMi45LTMuNiw0LjQgICAgYy0xLDEuNS0yLDMuMS0yLjksNC43QzczLjUsNTIuNSw3NS4zLDUzLjYsNzYuNCw1Mi44TDc2LjQsNTIuOHoiLz4KDTwvZz4KDTwvZz4KDTwvc3ZnPg==";;
  37.  
  38. // 如果当前网址是 https://rdfplayer.mrgaocloud.com/,不创建图标
  39. if (window.location.hostname !== 'rdfplayer.mrgaocloud.com') {
  40. // 拖拽功能
  41. var startDrag = function(target) {
  42. var getCss = function(o, key) {
  43. return o.currentStyle ? o.currentStyle[key] : document.defaultView.getComputedStyle(o, false)[key];
  44. };
  45. var params = { left: 0, top: 0, currentX: 0, currentY: 0, rectLeft: 0, rectTop: 0, rectRight: 0 };
  46. if (getCss(target, "position") === "static") {
  47. target.style.position = "relative";
  48. }
  49. if (getCss(target, "left") !== "auto") {
  50. params.left = getCss(target, "left");
  51. }
  52. if (getCss(target, "top") !== "auto") {
  53. params.top = getCss(target, "top");
  54. }
  55. target.addEventListener("mousedown", function(event) {
  56. moving = true;
  57. params.rectLeft = target.getBoundingClientRect().left + document.body.scrollLeft;
  58. params.rectTop = target.getBoundingClientRect().top + document.body.scrollTop;
  59. params.rectRight = document.documentElement.clientWidth - target.getBoundingClientRect().right;
  60. if (event.preventDefault) {
  61. event.preventDefault();
  62. } else {
  63. event.returnValue = false;
  64. }
  65. var e = event;
  66. params.currentX = e.clientX;
  67. params.currentY = e.clientY;
  68. document.addEventListener("mousemove", function(event) {
  69. if (moving == false) {
  70. return 0;
  71. }
  72. am = true;
  73. var e = event ? event : window.event;
  74. var nowX = e.clientX,
  75. nowY = e.clientY;
  76. var disX = nowX - params.currentX,
  77. disY = nowY - params.currentY;
  78. if (disX < 0 && Math.abs(disX) > params.rectLeft) {
  79. disX = -params.rectLeft;
  80. }
  81. if (disY < 0 && Math.abs(disY) > params.rectTop) {
  82. disY = -params.rectTop;
  83. }
  84. if (disX > 0 && disX > params.rectRight) {
  85. disX = params.rectRight;
  86. }
  87. target.style.left = parseInt(params.left) + disX + "px";
  88. target.style.top = parseInt(params.top) + disY + "px";
  89. });
  90.  
  91. document.addEventListener("mouseup", function() {
  92. moving = false;
  93. setTimeout(function() { am = false; }, 50);
  94. if (getCss(target, "left") !== "auto") {
  95. params.left = getCss(target, "left");
  96. }
  97. if (getCss(target, "top") !== "auto") {
  98. params.top = getCss(target, "top");
  99. }
  100. });
  101. });
  102. };
  103.  
  104. // 创建图标
  105. var ele = document.createElement("img");
  106. ele.id = "imgid";
  107. ele.style = "margin: 250px 0px 0px 10px;width:60px;position: fixed;top:0px;z-index: 99999;";
  108. ele.src = logo;
  109. document.body.appendChild(ele);
  110. startDrag(document.getElementById('imgid'));
  111.  
  112. // 点击事件:跳转解析站并传递B站地址
  113. document.getElementById("imgid").addEventListener("click", function(e) {
  114. if (am == false) {
  115. // 重置状态
  116. hasPlayed = false;
  117. moving = false;
  118.  
  119. // 直接打开带URL参数的解析站
  120. var videoUrl = encodeURIComponent(window.location.href);
  121. var targetUrl = `https://rdfplayer.mrgaocloud.com/?url=${videoUrl}`;
  122. window.open(targetUrl, "_blank");
  123. }
  124. });
  125. }
  126.  
  127. // 自动播放功能(第二个脚本内容)
  128. let hasPlayed = false;
  129. const iframe = document.getElementById("RDFPLAYER_VOD_IFRAME");
  130. if (!iframe) {
  131. console.error("Iframe not found!");
  132. return;
  133. }
  134.  
  135. function handleIframeLoad() {
  136. if (hasPlayed) return;
  137. hasPlayed = true;
  138.  
  139. setTimeout(function() {
  140. const playButton = document.getElementById("ssdi");
  141. if (playButton) {
  142. playButton.click();
  143. } else {
  144. console.error("Play button not found!");
  145. }
  146.  
  147. const message = { action: "play" };
  148. iframe.contentWindow.postMessage(message, "*");
  149.  
  150. // 增加延迟以确保内容加载完毕
  151. setTimeout(() => {
  152. enterFullscreen();
  153. }, 2000); // 增加2秒延迟
  154. }, 3000);
  155. }
  156.  
  157. iframe.onload = handleIframeLoad;
  158. let previousSrc = iframe.src;
  159. const observer = new MutationObserver(function(mutations) {
  160. mutations.forEach(function(mutation) {
  161. if (mutation.type === 'attributes' && mutation.attributeName === 'src') {
  162. previousSrc = iframe.src;
  163. iframe.onload = handleIframeLoad;
  164. }
  165. });
  166. });
  167. observer.observe(iframe, { attributes: true });
  168.  
  169. if (!iframe.src || iframe.src === "https://rdfplayer.mrgaocloud.com/player/?url=") {
  170. iframe.src = "https://rdfplayer.mrgaocloud.com/player/?url=VALID_VIDEO_URL&t=" + Date.now();
  171. } else {
  172. iframe.src = iframe.src + "&t=" + Date.now(); // 添加时间戳参数
  173. }
  174.  
  175. function enterFullscreen() {
  176. try {
  177. if (iframe.requestFullscreen) {
  178. iframe.requestFullscreen();
  179. } else if (iframe.mozRequestFullScreen) {
  180. iframe.mozRequestFullScreen();
  181. } else if (iframe.webkitRequestFullscreen) {
  182. iframe.webkitRequestFullscreen();
  183. } else if (iframe.msRequestFullscreen) {
  184. iframe.msRequestFullscreen();
  185. } else {
  186. console.error("Fullscreen API is not supported.");
  187. }
  188. } catch (error) {
  189. console.error("Failed to enter fullscreen:", error);
  190. }
  191. }
  192.  
  193. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址