如何使youtube字幕可选?

时间:2016-10-20 23:05:35

标签: javascript dom youtube caption subtitle

当激活youtube字幕时,如果你试图通过id="caption-window-1"选择DOM中标识的字幕标题中的单词,首先要注意的是:它不可选,所以为了使其可选,我使用chrome浏览器上的开发人员工具在js控制台中运行此脚本:

(function() {
var caption= document.getElementById("caption-window-1");
caption.style.cursor="text";
caption.style["-webkit-user-select"]="all";
            })();

轮到完美,但点击它时标题仍在移动(你可以在YouTube上自己尝试)

所以我不能轻易地在标题中选择一个单词,它仍然可以随时移动。

我想在onc​​lick事件上禁用字幕移动,是否有想法使用javascript修复它?

5 个答案:

答案 0 :(得分:1)

在控制台中运行此脚本:

setInterval(make_subtitles_selectable, 250);
function make_subtitles_selectable(){
    elem=document.querySelector("span.ytp-caption-segment:not([selectable='true']");
    if(elem!=null){
        elem.style.userSelect="text";
        elem.style.cursor="text";
        elem.setAttribute("selectable", "true");
    }
    elem=document.querySelector("#caption-window-1:not([selectable='true']");
    if(elem!=null){
        elem.addEventListener("mousedown", function (event) {
            event.stopPropagation();
        }, true);
        elem.setAttribute("selectable", "true");
    }
}

答案 1 :(得分:0)

问题是文本字段是可拖动的,以允许用户将字段定位在屏幕上的任何位置,因此它与您尝试执行的操作冲突。您只需记录并将文本推送到数组并在视频完成后解析它。

该片段不是很优雅,但应该让你开始:

var wordsAll = [];
var wordsPrev = [];
var previousLine = '';
function checkText() {
  var caption= document.getElementById("caption-window-1");
  requestAnimationFrame(checkText);
  if ( caption === null ) return;
  var wordsNow = caption.textContent.split(' ');
  if ( wordsPrev.length > 0 && wordsPrev.length < wordsNow.length ) {
    for ( var i=0,l= wordsNow.length; i<l; i++ ) {
      wordsAll.push(wordsPrev[i]);
    }
  }
  wordsPrev = wordsNow.slice(l);
}
checkText(); 

然后执行console.log(wordsAll.join(' '))

之类的操作

希望有所帮助!

答案 2 :(得分:0)

您需要安装capturing事件监听器,在事件上调用stopPropagation以拦截它,然后youtube javascript可以处理它们并抑制默认操作,即文本选择

youtube subtitle event listeners

答案 3 :(得分:0)

这就是我想要做的事情:

screenshot

答案 4 :(得分:0)

这个问题活跃了三年。我个人认为我已经解决了这个问题

https://gist.github.com/iamwwc/8bf9d1ea3aa38120a9ed07014cd5d73e

脚本完成了以下操作

  1. 在字幕中添加“ user-select:none” css以使其变为可选
  2. 在播放器上添加事件侦听器,在发生单击,touchstart,鼠标悬停,鼠标按下事件时停止传播

通过此脚本,我的翻译选择功能现在可以使用

如果您希望字幕可移动并移出播放器,则可以尝试以下脚本

https://gist.github.com/iamwwc/341b0513f9b22b1067a479225f3d6626

希望我的想法可以对您有所帮助,为翻译人员提供一个很好的工作工具