Start · Sprachen · JavaScript · Referenz · HTMLTrackElement.track

HTMLTrackElement.track

Eigenschaft

Schreibgeschützte Eigenschaft, die das <code>TextTrack</code>-Objekt zurückgibt, das zur Textspur eines <code>&lt;track&gt;</code>-Elements gehört.

seit JavaScript Baseline: alle modernen Browser Kategorie: webapi

Signatur

HTMLTrackElement.track

Beschreibung

Die Eigenschaft track der Schnittstelle HTMLTrackElement ist schreibgeschützt. Sie liefert das TextTrack-Objekt, das der Browser für ein <track>-Element anlegt. Darüber steuerst du die eigentliche Textspur, also Untertitel, Beschreibungen, Kapitel oder Metadaten, aus JavaScript heraus.

Das TextTrack-Objekt ist dasselbe, das auch in HTMLMediaElement.textTracks steht. Mit track.mode blendest du Untertitel ein ("showing"), lädst sie nur, ohne sie anzuzeigen ("hidden"), oder schaltest sie ab ("disabled"). Über track.cues und track.activeCues liest du die einzelnen WebVTT-Einträge aus. Mit dem Ereignis cuechange reagierst du auf Wechsel während der Wiedergabe.

Wichtig: Der Browser lädt die Cues erst, wenn der Modus der Spur nicht "disabled" ist, zum Beispiel bei gesetztem default-Attribut oder bei mode = "hidden". Ob das Laden fertig ist, zeigen HTMLTrackElement.readyState und das load-Ereignis am <track>-Element.

Rückgabewert

Typ
TextTrack
Beschreibung
Das TextTrack-Objekt des <track>-Elements. Seine Eigenschaften kind, label und language kommen aus den Attributen des Elements. Die Eigenschaft liefert immer dasselbe Objekt zurück.

Beispiele

Untertitel per Knopfdruck ein- und ausschalten

// HTML:
// <video id="film" src="film.mp4" controls>
//   <track id="de" kind="subtitles" srclang="de" label="Deutsch" src="film.de.vtt">
// </video>
// <button id="toggle">Untertitel</button>

const trackEl = document.getElementById('de');
const textTrack = trackEl.track;

document.getElementById('toggle').addEventListener('click', () => {
  textTrack.mode = textTrack.mode === 'showing' ? 'disabled' : 'showing';
  console.log(`${textTrack.label}: ${textTrack.mode}`);
});
Deutsch: showing

Cues nach dem Laden auslesen

const trackEl = document.querySelector('track[kind="chapters"]');

// Spur laden, ohne sie anzuzeigen
trackEl.track.mode = 'hidden';

trackEl.addEventListener('load', () => {
  const cues = Array.from(trackEl.track.cues);
  cues.forEach((cue) => {
    console.log(`${cue.startTime.toFixed(1)}s – ${cue.text}`);
  });
});
0.0s – Einleitung 42.5s – Installation 120.0s – Fazit

Aktuellen Untertitel in eigenem Element anzeigen

const trackEl = document.querySelector('#film track');
const ausgabe = document.getElementById('untertitel');
const { track } = trackEl;

// Laden, aber nicht nativ darstellen
track.mode = 'hidden';

track.addEventListener('cuechange', () => {
  const aktiv = track.activeCues?.[0];
  ausgabe.textContent = aktiv ? aktiv.text : '';
});

Eigenschaften der Spur prüfen

const trackEl = document.createElement('track');
trackEl.kind = 'captions';
trackEl.srclang = 'en';
trackEl.label = 'English';
document.querySelector('video').append(trackEl);

console.log(trackEl.track instanceof TextTrack);
console.log(trackEl.track.kind, trackEl.track.language, trackEl.track.label);
console.log(trackEl.track === trackEl.track);
true captions en English true

// Wichtig · Fallstricke

  • Schreibgeschützt: trackEl.track = … hat keine Wirkung und wirft im strikten Modus einen TypeError. Ändern lassen sich nur die Eigenschaften des zurückgegebenen Objekts, etwa mode.
  • Cues fehlen: Solange mode auf "disabled" steht, lädt der Browser die VTT-Datei nicht. track.cues ist dann null. Setze vor dem Auslesen mode = "hidden" oder "showing" und warte auf das load-Ereignis.
  • CORS: VTT-Dateien von einer anderen Herkunft brauchen am Medienelement das Attribut crossorigin und passende CORS-Header auf dem Server. Sonst schlägt das Laden fehl und am <track> wird das Ereignis error ausgelöst.
  • Sicherheit: cue.text kann WebVTT-Markup enthalten. Gib den Text in eigenen Oberflächen mit textContent aus, nicht mit innerHTML, damit kein XSS möglich ist.
  • Kompatibilität: Wird in allen modernen Browsern unterstützt. Im Internet Explorer gab es die Eigenschaft ab Version 10, aber nur eingeschränkt.