如何在 Safari 中隐藏视频字幕?

问题描述 投票:0回答:3

我为我的视频设置了字幕。据我所知,

textTracks
是 Chrome 和 FireFox 的正确选择。我在 Safari 中找不到类似的东西。他们是否希望我添加和删除标签以隐藏和显示标题?

我在其他浏览器中工作的代码很简单:

function setMode() {
  videoTag.textTracks[0].mode = isOn ? 'showing' : 'hidden';
}

加载页面时,我看到了这个

textTracks

enter image description here

后来由于某种原因显示了两个

textTracks
,其中第二个是空的。

enter image description here

我最近尝试的完整代码是:

let isOn = false;
const videoTag = doc.getElementsByTagName('video')[0];
const trackTag = doc.createElement('track');
const id = win.ccv$serverData.ccvid;

function setMode() {
  console.log([...videoTag.textTracks]);
  const tracks = [...videoTag.textTracks].filter(t => t.kind === 'captions');
  tracks.forEach(track => {
    console.log('updating', track);
    track.mode = isOn ? 'showing' : 'hidden';
    console.log(track.mode);
  });
}

trackTag.setAttribute('default', '');
trackTag.setAttribute('src', `/api/video/${id}/captions`);
trackTag.setAttribute('kind', `captions`);

videoTag.appendChild(trackTag);

setMode();
javascript html
3个回答
1
投票

您可以尝试删除

<track>
元素:

[...document.querySelectorAll("track")].forEach((track) => track.remove());

另一种方法是使用 CSS:

track {
  display: none !important
}

祝你好运。


1
投票

所以你可以注意到我的代码正在做

[0]
我倾向于避免。但我手动附加了一个
track
。显然 Safari 正在为
track
添加另一个
captions
- 即使我的标签说它的
kind
captions

所以在只有一个标签的情况下,仍然有两个曲目列表。

如果有人可以解释为什么 Safari 可能会这样做,我会更改他们的答案。或者这可能是一个错误?

我在

https://developer.apple.com/documentation/webkitjs/texttracklist/1632931-onaddtrack
中找到了方法onaddtrack

这使我的解决方案变成:

videoTag.textTracks.onaddtrack = setMode;

我显然还必须删除

videoTag.textTracks[0].mode = isOn ? 'showing' : 'hidden';
位以支持

  const tracks = [...videoTag.textTracks].filter(t => t.kind === 'captions');
  tracks.forEach(track => {
    track.mode = isOn ? 'showing' : 'hidden';
  });

0
投票

只需在 video.addEventListener("loadeddata", (event) => {} event 上将模式设置为“隐藏”

© www.soinside.com 2019 - 2024. All rights reserved.