DouyinPlusOne

抖音实现CC+1功能

目前为 2023-09-07 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name DouyinPlusOne
  3. // @namespace Cedros
  4. // @version 2.2
  5. // @description 抖音实现CC+1功能
  6. // @author Cedros
  7. // @match *://live.douyin.com/*
  8. // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
  9. // @grant none
  10. // @license MIT
  11. // ==/UserScript==
  12.  
  13. (function() {
  14. 'use strict';
  15. ondblclick = function(event){
  16. let txt = GetMouseText(event)
  17. SendMessage(txt)
  18. }
  19.  
  20. function GetDanmuElement(){
  21. return document.getElementsByClassName("xgplayer-danmu danmu")[0]
  22. }
  23.  
  24. function GetMouseText(event){
  25. let myDiv = GetDanmuElement()
  26. for (let i = 0; i < myDiv.children.length; i++) {
  27. let child = myDiv.children[i];
  28. if(isInDiv(event, child)){
  29. return GetText(child)
  30. }
  31. }
  32. return null
  33. }
  34.  
  35. function GetText(div){
  36. let txt = div.querySelector('.webcast-chatroom___content-with-emoji-text').textContent
  37. if(txt) return txt
  38. return null
  39. }
  40.  
  41. function GetTop(e){
  42. var offset = e.offsetTop
  43. if(e.offsetParent!=null) offset += GetTop(e.offsetParent)
  44. return offset
  45. }
  46.  
  47. function GetLeft(e){
  48. var offset = e.offsetLeft
  49. if(e.offsetParent!=null) offset += GetLeft(e.offsetParent)
  50. return offset
  51. }
  52.  
  53. function GetTranslateX(div){
  54. let transform = window.getComputedStyle(div).getPropertyValue("transform")
  55. let matrix = new DOMMatrixReadOnly(transform)
  56. let translateX = matrix.m41;
  57. return translateX
  58. }
  59.  
  60. function isInDiv(event,div){
  61. var x=event.clientX
  62. var y=event.clientY
  63. var divx1 = GetLeft(div) + GetTranslateX(div)
  64. var divy1 = GetTop(div)
  65. var divx2 = GetLeft(div) + div.offsetWidth + GetTranslateX(div)
  66. var divy2 = GetTop(div) + div.offsetHeight
  67.  
  68. return !(x < divx1 || x > divx2 || y < divy1 || y > divy2)
  69. }
  70.  
  71. function setNativeValue(element, value) {
  72. let valueSetter = Object.getOwnPropertyDescriptor(element, 'value').set;
  73. let prototype = Object.getPrototypeOf(element);
  74. let prototypeValueSetter = Object.getOwnPropertyDescriptor(prototype, 'value').set;
  75.  
  76. if (valueSetter && valueSetter !== prototypeValueSetter) {
  77. prototypeValueSetter.call(element, value);
  78. } else {
  79. valueSetter.call(element, value);
  80. }
  81. }
  82.  
  83. function SendMessage(msg){
  84. if(msg == null) return
  85. //document.querySelector('.webcast-chatroom___textarea').value = msg;
  86. let txtarea = document.querySelector('.webcast-chatroom___textarea');
  87.  
  88. /*let evt = document.createEvent('HTMLEvents');
  89. evt.initEvent('input', true, true);
  90. txtarea.focus()
  91. txtarea.dispatchEvent(evt);
  92. txtarea.value = msg;*/
  93.  
  94. setNativeValue(txtarea,msg);
  95. txtarea.dispatchEvent(new Event('input', { bubbles: true }));
  96.  
  97. let send_btn = document.querySelector('.webcast-chatroom___send-btn');
  98. //send_btn.click()
  99.  
  100. }
  101.  
  102. })();