Signatur
Beschreibung
FontFaceSetLoadEvent ist das Ereignisobjekt, das ein FontFaceSet (meist document.fonts oder im Worker self.fonts) auslöst, wenn Schriften geladen werden. Es gibt drei Ereignistypen: loading (das Laden beginnt), loadingdone (alle angestoßenen Ladevorgänge sind abgeschlossen) und loadingerror (mindestens eine Schrift konnte nicht geladen werden).
Zusätzlich zu den geerbten Eigenschaften von Event bietet die Schnittstelle die schreibgeschützte Eigenschaft fontfaces: ein Array von FontFace-Objekten, die zu diesem Ereignis gehören. Bei loadingdone sind das die erfolgreich geladenen Schriften, bei loadingerror die fehlgeschlagenen.
Einsatzzwecke sind etwa das Vermeiden von FOUT/FOIT (Klasse am <html>-Element setzen, sobald Webfonts bereit sind), Neuberechnen von Layouts oder Canvas-Texten nach dem Laden von Schriften sowie Monitoring fehlgeschlagener Font-Downloads.
Einen Konstruktor new FontFaceSetLoadEvent(type, options) gibt es ebenfalls, er wird aber hauptsächlich für Tests oder eigene Ereignis-Simulation verwendet.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $type Pflicht | string | Nur beim Konstruktor: Ereignistyp, z. B. "loading", "loadingdone" oder "loadingerror". |
|
| $options | { fontfaces?: FontFace[], bubbles?: boolean, cancelable?: boolean, composed?: boolean } | {} | Nur beim Konstruktor: fontfaces legt das Array der betroffenen Schriften fest (Standard: leeres Array); dazu die üblichen EventInit-Optionen. |
Rückgabewert
fontfaces (FontFace[]).Beispiele
Geladene Schriften protokollieren (addEventListener)
document.fonts.addEventListener('loadingdone', (event) => {
for (const face of event.fontfaces) {
console.log(`Geladen: ${face.family} ${face.weight} ${face.style}`);
}
document.documentElement.classList.add('fonts-loaded');
});
// Laden explizit anstoßen
document.fonts.load('700 16px "Inter"');
Fehlgeschlagene Schriften über on-Property melden
document.fonts.onloadingerror = (event) => {
const failed = event.fontfaces.map((f) => f.family);
console.warn('Schriften nicht geladen:', failed);
};
const broken = new FontFace('Kaputt', 'url(/fonts/gibt-es-nicht.woff2)');
document.fonts.add(broken);
broken.load().catch(() => {});
Ladebeginn anzeigen und Listener wieder entfernen
const onLoading = (event) => {
console.log(`Ladevorgang gestartet (${event.fontfaces.length} Schrift(en))`);
document.body.classList.add('fonts-loading');
};
document.fonts.addEventListener('loading', onLoading);
const face = new FontFace('Roboto', 'url(/fonts/roboto.woff2)');
document.fonts.add(face);
await face.load();
document.body.classList.remove('fonts-loading');
document.fonts.removeEventListener('loading', onLoading);
Ereignis für Tests selbst erzeugen
const face = new FontFace('Test', 'local(Arial)');
const evt = new FontFaceSetLoadEvent('loadingdone', { fontfaces: [face] });
console.log(evt.type, evt.fontfaces[0].family);
// Wichtig · Fallstricke
- Die Ereignisse feuern nur, wenn tatsächlich ein Ladevorgang stattfindet. Sind Schriften bereits im Cache geladen oder wird die Schrift nie im Dokument verwendet, kommt eventuell kein Ereignis – für „Sind alle Schriften fertig?“ ist
await document.fonts.readyzuverlässiger. loadingdonekann mehrfach feuern, wenn später weitere Schriften nachgeladen werden (z. B. durch neue CSS-Regeln).- Ein
loadingerrorwird ausgelöst, wenn mindestens eine Schrift fehlschlägt; einloadingdonekann trotzdem folgen – beide Arrays getrennt auswerten. fontfacesist ein eingefrorenes Array; Änderungen daran sind wirkungslos.- Kompatibilität: in Chrome, Edge, Firefox und Safari unterstützt; in Web Workern über
self.fontsnicht überall verfügbar. Ältere Browser (z. B. Internet Explorer) kennen die CSS Font Loading API nicht – per'fonts' in documentprüfen. - Bei Schriften von fremden Domains sind CORS-Header (
Access-Control-Allow-Origin) nötig, sonst endet das Laden inloadingerror.