当激活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上自己尝试)
所以我不能轻易地在标题中选择一个单词,它仍然可以随时移动。
我想在onclick事件上禁用字幕移动,是否有想法使用javascript修复它?
答案 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可以处理它们并抑制默认操作,即文本选择
答案 3 :(得分:0)
这就是我想要做的事情:
答案 4 :(得分:0)
这个问题活跃了三年。我个人认为我已经解决了这个问题
https://gist.github.com/iamwwc/8bf9d1ea3aa38120a9ed07014cd5d73e
脚本完成了以下操作
通过此脚本,我的翻译选择功能现在可以使用
如果您希望字幕可移动并移出播放器,则可以尝试以下脚本
https://gist.github.com/iamwwc/341b0513f9b22b1067a479225f3d6626
希望我的想法可以对您有所帮助,为翻译人员提供一个很好的工作工具