Start · Sprachen · JavaScript · Referenz · new TrackEvent()

new TrackEvent()

Methode

Erzeugt ein neues <code>TrackEvent</code>, das eine Änderung in einer <code>AudioTrackList</code>, <code>VideoTrackList</code> oder <code>TextTrackList</code> beschreibt.

seit JavaScript Baseline: alle modernen Browser (Chrome, Edge, Fir Kategorie: webapi

Signatur

new TrackEvent(type, eventInitDict)

Beschreibung

Der Konstruktor TrackEvent() erstellt ein Ereignisobjekt vom Typ TrackEvent. Solche Ereignisse lösen Browser normalerweise selbst aus, wenn in einer Track-Liste eines Medienelements ein Track hinzukommt oder entfernt wird. Die zugehörigen Ereignistypen sind addtrack und removetrack.

Die wichtigste Eigenschaft ist track. Sie verweist auf den betroffenen AudioTrack, VideoTrack oder TextTrack. Wenn du das Ereignis selbst erzeugst, übergibst du diesen Track im Initialisierungsobjekt.

Selbst erzeugte TrackEvent-Objekte brauchst du vor allem in Unit-Tests, in eigenen Medien-Playern oder bei Polyfills. Damit kannst du das Verhalten von addtrack- und removetrack-Listenern nachstellen, ohne echte Mediendateien zu laden. Das Ereignis verschickst du mit dispatchEvent().

Ein selbst ausgelöstes Ereignis verändert die Track-Liste nicht. Es informiert nur die registrierten Listener. Die Eigenschaft isTrusted ist dabei immer false.

Parameter

Name Typ Default Beschreibung
$type Pflicht string Name des Ereignisses, zum Beispiel "addtrack" oder "removetrack". Groß- und Kleinschreibung werden unterschieden.
$eventInitDict object {} Optionales Initialisierungsobjekt. Es enthält die Felder von EventInit (bubbles, cancelable, composed, jeweils Standardwert false) und zusätzlich track: einen AudioTrack, VideoTrack, TextTrack oder null (Standardwert null).

Rückgabewert

Typ
TrackEvent
Beschreibung
Ein neues TrackEvent-Objekt. Seine Eigenschaft track ist der übergebene Track oder null.

Beispiele

TrackEvent erzeugen und Eigenschaften prüfen

const video = document.createElement('video');
const textTrack = video.addTextTrack('subtitles', 'Deutsch', 'de');

const event = new TrackEvent('addtrack', { track: textTrack });

console.log(event.type);
console.log(event.track.label);
console.log(event.isTrusted);
addtrack Deutsch false

addtrack-Listener in einem Test simulieren

const video = document.createElement('video');
const tracks = video.textTracks;

const onAddTrack = (e) => {
  console.log(`Neuer Track: ${e.track.kind} (${e.track.language})`);
};
tracks.addEventListener('addtrack', onAddTrack);

// Track erzeugen (der Browser feuert dabei selbst ein addtrack-Ereignis, asynchron)
const track = video.addTextTrack('captions', 'Englisch', 'en');

// Ereignis zusätzlich manuell auslösen, z. B. im Unit-Test
tracks.dispatchEvent(new TrackEvent('addtrack', { track }));

tracks.removeEventListener('addtrack', onAddTrack);
Neuer Track: captions (en)

Fehlendes track-Feld abfangen

const event = new TrackEvent('removetrack');

const handleRemove = (e) => {
  if (!e.track) {
    console.warn('removetrack ohne Track-Referenz');
    return;
  }
  console.log(`Entfernt: ${e.track.label}`);
};

handleRemove(event);
removetrack ohne Track-Referenz

// Wichtig · Fallstricke

  • Nur ein Ereignis, keine Änderung an der Liste: Ein selbst ausgelöstes TrackEvent fügt keinen Track hinzu und entfernt keinen. Die Liste bleibt, wie sie ist.
  • Typ von track: Du kannst nur echte AudioTrack-, VideoTrack- oder TextTrack-Objekte übergeben. Normale Objekte führen zu einem TypeError. Es gibt keinen Konstruktor für TextTrack. Erzeuge Text-Tracks deshalb mit HTMLMediaElement.addTextTrack().
  • Browser-Unterstützung: TextTrackList und der Konstruktor funktionieren in allen modernen Browsern. audioTracks und videoTracks unterstützt dagegen im Wesentlichen nur Safari. In Chrome sind sie nur über ein Feature-Flag verfügbar, in Firefox nur über eine Einstellung. Prüfe die Unterstützung vorher, zum Beispiel mit 'audioTracks' in HTMLMediaElement.prototype.
  • Kein Bubbling: Track-Listen stehen nicht im DOM-Baum. Registriere Listener deshalb direkt an der Liste, also mit video.textTracks.addEventListener(...) oder über die Eigenschaft onaddtrack/onremovetrack.
  • Das addtrack-Ereignis, das der Browser bei addTextTrack() selbst auslöst, kommt asynchron als Task. Listener sollten also nicht davon ausgehen, dass es sofort eintrifft.