Signatur
Beschreibung
Die Eigenschaft src des Interfaces HTMLSourceElement spiegelt das HTML-Attribut src eines <source>-Elements. Sie enthält die URL einer Medienressource, etwa einer Video- oder Audiodatei, die ein übergeordnetes <video>- oder <audio>-Element abspielen kann.
Beim Lesen liefert die Eigenschaft immer eine absolute, vollständig aufgelöste URL. Ein relatives Attribut wie clip.mp4 wird also relativ zur Basis-URL des Dokuments aufgelöst. Den Wert genau so, wie er im Markup steht, erhältst du mit getAttribute('src'). Beim Schreiben wird das Attribut src gesetzt.
Du brauchst src vor allem, wenn du Medienquellen dynamisch erzeugst oder austauschst, zum Beispiel für verschiedene Qualitätsstufen, Sprachfassungen oder Playlists. Mehrere <source>-Elemente mit unterschiedlichen type-Angaben erlauben dem Browser, das erste Format zu wählen, das er abspielen kann.
Innerhalb von <picture> wird src ignoriert. Dort gelten srcset und sizes.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $value | string | Nur beim Setzen: neue URL (relativ oder absolut) der Medienressource. Wird in das Attribut src geschrieben. |
Rückgabewert
src. Fehlt das Attribut, ist das Ergebnis ein leerer String "".Beispiele
Aufgelöste URL gegenüber dem Attributwert
// HTML: <video id="player" controls><source src="media/intro.mp4" type="video/mp4"></video>
const source = document.querySelector('#player source');
console.log(source.src); // absolute URL
console.log(source.getAttribute('src')); // Wert wie im Markup
Videoquelle zur Laufzeit wechseln
const video = document.querySelector('#player');
const source = video.querySelector('source');
const switchQuality = (quality) => {
const time = video.currentTime;
source.src = `media/intro-${quality}.mp4`;
video.load(); // nötig, damit die neue Quelle übernommen wird
video.addEventListener('loadedmetadata', () => {
video.currentTime = time;
video.play();
}, { once: true });
};
document.querySelector('#hd').addEventListener('click', () => switchQuality('1080p'));
Mehrere Formate dynamisch als Quellen anlegen
const audio = document.createElement('audio');
audio.controls = true;
const formats = [
{ src: 'sounds/jingle.opus', type: 'audio/ogg; codecs=opus' },
{ src: 'sounds/jingle.mp3', type: 'audio/mpeg' }
];
for (const { src, type } of formats) {
const source = document.createElement('source');
source.src = src;
source.type = type;
audio.append(source);
}
document.body.append(audio);
audio.addEventListener('loadstart', () => console.log('Gewählt:', audio.currentSrc));
// Wichtig · Fallstricke
- Kein automatisches Neuladen: Wenn du
srceines vorhandenen<source>-Elements änderst, lädt das Medienelement die Ressource nicht neu. Rufe danachHTMLMediaElement.load()auf. - Welche Quelle gerade abgespielt wird, verrät
HTMLMediaElement.currentSrc, nichtsource.src. - Hat das
<video>/<audio>-Element selbst ein Attributsrc, werden alle<source>-Kindelemente ignoriert. - Innerhalb von
<picture>hatsrckeine Wirkung. Verwende dortsrcset. - Für Ressourcen von fremden Domains gelten CORS-Regeln, sobald du die Mediendaten auswertest, etwa per Canvas oder Web Audio. Setze dafür
crossoriginam Medienelement. - Übernimm URLs aus Benutzereingaben nicht ungeprüft. Eine Content Security Policy (
media-src) kann erlaubte Quellen einschränken. - Die Eigenschaft wird von allen modernen Browsern unterstützt.