Signatur
Beschreibung
Die Eigenschaft src eines HTMLIFrameElement spiegelt das HTML-Attribut src wider. Sie enthält die Adresse des Dokuments, das im Inline-Frame angezeigt wird. Beim Lesen liefert sie immer eine absolute, aufgelöste URL, auch wenn im Attribut ein relativer Pfad steht. Wer den Rohwert braucht, nutzt getAttribute('src').
Wird src gesetzt, startet der Browser sofort eine Navigation im Frame und lädt den neuen Inhalt. Das eignet sich zum Beispiel für nachgeladene Widgets, Vorschaufenster, eingebettete Videos oder Karten, die erst bei Bedarf eingebunden werden. Ist das Laden abgeschlossen, wird am Element das Ereignis load ausgelöst.
Ist zusätzlich das Attribut srcdoc gesetzt, hat es Vorrang vor src. Fehlt src oder ist es leer, zeigt der Frame about:blank an. Beim Lesen gibt die Eigenschaft in diesem Fall einen leeren String zurück.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $value | string | "" | Beim Setzen: absolute oder relative URL des einzubettenden Inhalts. Relative URLs werden gegen die Basis-URL des Dokuments aufgelöst. |
Rückgabewert
src oder ein leerer String, wenn das Attribut fehlt.Beispiele
Aufgelöste URL lesen und mit dem Attributwert vergleichen
// Seite läuft unter https://example.com/app/
const frame = document.createElement('iframe');
frame.setAttribute('src', 'vorschau.html');
document.body.append(frame);
console.log(frame.getAttribute('src'));
console.log(frame.src);
Inhalt dynamisch wechseln und auf das Laden warten
const frame = document.querySelector('#preview');
const loadInFrame = (iframe, url) => new Promise((resolve, reject) => {
iframe.addEventListener('load', () => resolve(iframe), { once: true });
iframe.addEventListener('error', reject, { once: true });
iframe.src = url;
});
const init = async () => {
await loadInFrame(frame, '/docs/kapitel-2.html');
console.log('Geladen:', frame.src);
};
init();
YouTube-Video erst beim Klick einbetten (Lazy Embed)
const button = document.querySelector('#play');
const frame = document.querySelector('#video');
button.addEventListener('click', () => {
const url = new URL('https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ');
url.searchParams.set('autoplay', '1');
frame.src = url.href; // erst jetzt wird etwas geladen
button.hidden = true;
});
Frame zurücksetzen bzw. neu laden
const frame = document.querySelector('iframe');
// Neu laden: denselben Wert erneut zuweisen
frame.src = frame.src;
// Inhalt leeren
frame.src = 'about:blank';
console.log(frame.src);
// Wichtig · Fallstricke
- Sicherheit: Weisen Sie
srcniemals ungeprüfte Benutzereingaben zu. URLs wiejavascript:alert(1)führen Code im Kontext der Seite aus (XSS). Erlauben Sie nurhttps:-URLs von bekannten Hosts und prüfen Sie diese vorher mitnew URL(). Mit Trusted Types kann eine Content Security Policy solche Zuweisungen zusätzlich absichern. - Fremde Inhalte sollten Sie mit dem Attribut
sandboxund passendenallow-Richtlinien einschränken. Die CSP-Direktiveframe-srclegt fest, welche Quellen überhaupt erlaubt sind. Ob sich eine Seite einbetten lässt, bestimmt dagegen der Zielserver überX-Frame-Optionsbzw.frame-ancestors. Wird das Einbetten blockiert, bleibt der Frame leer und es gibt kein zuverlässigeserror-Ereignis. - Bei Frames von einer anderen Herkunft (cross-origin) kann
frame.srcnach einer Navigation im Frame veraltet sein. Die Eigenschaft zeigt nur den gesetzten Attributwert, nicht die aktuelle Adresse des Frames.contentWindow.locationist bei anderer Herkunft nicht lesbar. - Jede Zuweisung von
srcerzeugt einen neuen Eintrag im Verlauf der Sitzung. Der Zurück-Knopf navigiert dann womöglich im Frame. Ohne neuen Verlaufseintrag geht es mitframe.contentWindow.location.replace(url)(nur bei gleicher Herkunft) oder indem Sie den Frame vor dem Einfügen ins DOM konfigurieren. - Ist
srcdocgesetzt, hat eine Änderung vonsrckeine sichtbare Wirkung. - Für verzögertes Laden gibt es auch
loading="lazy". Das wird in allen modernen Browsern unterstützt.