Signatur
Beschreibung
Der Konstruktor FontFaceSetLoadEvent() erzeugt ein Ereignisobjekt vom Typ FontFaceSetLoadEvent. Solche Ereignisse löst der Browser normalerweise selbst auf document.fonts (einem FontFaceSet) aus, und zwar wenn das Laden von Schriften beginnt (loading), abgeschlossen ist (loadingdone) oder fehlgeschlagen ist (loadingerror).
Die wichtigste Eigenschaft des Ereignisses ist fontfaces: ein fest eingefrorenes Array der FontFace-Objekte, die zu diesem Ladevorgang gehören. Im Handler von loadingdone steht es für die erfolgreich geladenen Schriften, bei loadingerror für die fehlgeschlagenen.
Selbst ruft man den Konstruktor vor allem in Tests auf, zum Beispiel um Code zu prüfen, der auf Schrift-Ereignisse reagiert, ohne auf echte Netzwerkanfragen zu warten. Außerdem eignet er sich, um in eigenen EventTarget-Strukturen ein einheitliches Ereignisformat zu verwenden. Weil FontFaceSetLoadEvent von Event erbt, lassen sich auch die üblichen Optionen wie bubbles und cancelable angeben.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $type Pflicht | string | Name des Ereignisses, üblicherweise "loading", "loadingdone" oder "loadingerror". Groß- und Kleinschreibung wird beachtet. |
|
| $options | object | {} | Optionales Objekt. Es kann alle Optionen von Event() enthalten (bubbles, cancelable, composed) und zusätzlich fontfaces. |
| $options.fontfaces | FontFace[] | [] | Array von FontFace-Objekten, das später über event.fontfaces gelesen werden kann. |
Rückgabewert
FontFaceSetLoadEvent-Objekt mit dem angegebenen Typ. Seine Eigenschaft fontfaces enthält die übergebenen Schriften.Beispiele
Ereignis erzeugen und Eigenschaften lesen
const font = new FontFace('MeineSchrift', 'url(/fonts/meine-schrift.woff2)');
const event = new FontFaceSetLoadEvent('loadingdone', {
fontfaces: [font]
});
console.log(event.type);
console.log(event.fontfaces.length);
console.log(event.fontfaces[0].family);
console.log(Object.isFrozen(event.fontfaces));
Echte Ladeereignisse auf document.fonts abhören
document.fonts.addEventListener('loadingdone', (event) => {
const namen = event.fontfaces.map((f) => f.family);
console.log('Geladen:', namen.join(', '));
document.documentElement.classList.add('fonts-loaded');
});
document.fonts.addEventListener('loadingerror', (event) => {
console.warn('Fehlgeschlagen:', event.fontfaces.map((f) => f.family));
});
// Laden anstoßen
const font = new FontFace('Inter', 'url(/fonts/inter.woff2)');
document.fonts.add(font);
font.load().catch(() => {});
Handler im Test mit einem simulierten Ereignis prüfen
const target = new EventTarget();
const geladen = [];
const onFontsLoaded = (event) => {
geladen.push(...event.fontfaces.map((f) => f.family));
};
target.addEventListener('loadingdone', onFontsLoaded);
const fakeFonts = [
new FontFace('Roboto', 'local(Roboto)'),
new FontFace('Lora', 'local(Lora)')
];
target.dispatchEvent(new FontFaceSetLoadEvent('loadingdone', { fontfaces: fakeFonts }));
console.log(geladen);
target.removeEventListener('loadingdone', onFontsLoaded);
// Wichtig · Fallstricke
- Ein selbst erzeugtes und per
dispatchEvent()versendetes Ereignis hatisTrusted === false. Die Schriften werden dadurch nicht geladen, und der Zustand vondocument.fonts(status,ready) bleibt unverändert. event.fontfacesist ein eingefrorenes Array. Versuche, es zu verändern, werden stillschweigend ignoriert bzw. werfen im Strict Mode einenTypeError.- Ob das Laden aller Schriften fertig ist, prüft man meist einfacher mit
await document.fonts.ready. Die Ereignisse sind nur dann nützlich, wenn man einzelne Ladevorgänge verfolgen muss. - Ohne
newaufgerufen wirft der Konstruktor einenTypeError. In Web Workern gibt es ihn überself.fonts, wobei die Unterstützung je nach Browser verschieden ist. Node.js kennt diese API nicht. - Hinweis zur Kompatibilität: Sehr alte Browser (Internet Explorer, Safari vor Version 10) unterstützen die CSS Font Loading API nicht. Vorher mit
'FontFaceSetLoadEvent' in windowprüfen, ob sie vorhanden ist.