youtube-danmaku

Youtube livechat danmaku

目前為 2020-08-22 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @name youtube-danmaku
  3. // @namespace https://github.com/IronKinoko/ytb-danmaku
  4. // @version 0.1.2
  5. // @lisence MIT
  6. // @description Youtube livechat danmaku
  7. // @author Ironkinoko
  8. // @match https://www.youtube.com/watch*
  9. // @grant none
  10. // @require https://cdn.jsdelivr.net/npm/comment-core-library@0.11.1/dist/CommentCoreLibrary.min.js
  11. // ==/UserScript==
  12.  
  13. (function() {
  14. 'use strict';
  15. const style = document.createElement('style')
  16. style.innerHTML = ".abp{position:relative;}.abp .container{border:0;bottom:0;display:block;left:0;margin:0;overflow:hidden;position:absolute;right:0;top:0;touch-callout:none;-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}.abp .container .cmt{color:#fff;font-family:SimHei,SimSun,Heiti,'MS Mincho',Meiryo,'Microsoft YaHei',monospace;font-size:25px;letter-spacing:0;line-height:100%;margin:0;padding:3px 0 0 0;position:absolute;text-decoration:none;text-shadow:-1px 0 #000,0 1px #000,1px 0 #000,0 -1px #000;-webkit-text-size-adjust:none;-ms-text-size-adjust:none;text-size-adjust:none;-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;white-space:pre;word-break:keep-all;}.abp .container .cmt.no-shadow{text-shadow:none;}.abp .container .cmt.reverse-shadow{text-shadow:-1px 0 #fff,0 1px #fff,1px 0 #fff,0 -1px #fff;}.abp .container .cmt.css-optimize{will-change:transform;}"
  17. document.head.append(style)
  18. // Your code here...
  19.  
  20. !function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){e.exports=n(1)},function(e,t){window.addEventListener("load",e=>{!function e(){try{document.getElementById("player-container").classList.add("abp"),document.getElementById("ytd-player").classList.add("container"),window.CM=new CommentManager(document.querySelector("#ytd-player")),CM.options.global.scale=1.5,CM.options.global.opacity=.7,CM.init(),CM.start(),n=setInterval(()=>{c()},100),o=document.createElement("button"),o.textContent="弹幕: 开",o.classList.add("ytp-button"),o.style.width="auto",o.onclick=()=>{a?(a=!1,CM.stop(),CM.clear(),o.textContent="弹幕: 关",clearInterval(n)):(a=!0,CM.clear(),CM.start(),o.textContent="弹幕: 开",n=setInterval(()=>{c()},100))},document.querySelector(".ytp-left-controls").append(o),function(){const e=document.querySelector("video");e.addEventListener("pause",()=>{a=!1,CM.stop(),o.textContent="弹幕: 关",clearInterval(n)}),e.addEventListener("play",()=>{a=!0,CM.clear(),CM.start(),o.textContent="弹幕: 开",n=setInterval(()=>{c()},100)})}(),window.addEventListener("resize",()=>{CM.init(document.querySelector("#ytd-player"))})}catch(t){setTimeout(()=>{e()},3e3)}}()});let n,r,o,a=!0;function c(){const e=document.querySelector("iframe#chatframe");if(e){const t=e.contentDocument,n=Array.from(t.querySelectorAll("yt-live-chat-text-message-renderer")).pop();if(n){const e=n.id,t=n.querySelector("#message").textContent;a&&r!==e&&CM.send({text:t,mode:1,color:16777215}),r=e}}}}]);
  21. })();