youtube双语字幕

youtube中英双语字幕

  1. // ==UserScript==
  2. // @name youtube双语字幕
  3. // @version 0.1
  4. // @description youtube中英双语字幕
  5. // @author wwh
  6. // @match https://www.youtube.com/watch*
  7. // @require https://unpkg.com/xhook@latest/dist/xhook.min.js
  8. // @grant none
  9. // @namespace https://gf.qytechs.cn/users/293239
  10. // ==/UserScript==
  11.  
  12. (function() {
  13. xhook.after(function (request, response) {
  14. if (request.url.includes('/api/timedtext') && !request.url.includes('&tlang=')) {
  15. let xhr = new XMLHttpRequest();
  16. xhr.open('GET', `${request.url}&tlang=zh-Hans`, false);
  17. xhr.send();
  18.  
  19. if (response.xml.querySelector('head pen')) {
  20. xhr.responseXML.querySelectorAll('p').forEach(e => {
  21. let p = response.xml.querySelector(`p[t='${e.getAttribute('t')}']`);
  22. if (p) {
  23. if (p.childElementCount && e.previousElementSibling) {
  24. let previous = e.previousElementSibling;
  25. previous.setAttribute('d', e.getAttribute('t') - previous.getAttribute('t'));
  26. }
  27.  
  28. e.textContent = [p.textContent.replace('\n', ' '), e.textContent.replace('\n', ' ')].join('\n');
  29. }
  30. });
  31. } else {
  32. xhr.responseXML.querySelector('body').innerHTML = response.xml.querySelector('body').innerHTML.replace(/\n/g, ' ') +
  33. xhr.responseXML.querySelector('body').innerHTML.replace(/\n/g, ' ');
  34. }
  35.  
  36. response.text = new XMLSerializer().serializeToString(xhr.responseXML);
  37. }
  38. });
  39. })();

QingJ © 2025

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