Signatur
Beschreibung
Die schreibgeschützte Eigenschaft isTrusted des Event-Interfaces zeigt an, ob der Browser selbst (User-Agent) ein Ereignis erzeugt hat. Das gilt für echte Benutzeraktionen wie Mausklicks oder Tastendrücke. Es gilt auch für Ereignisse, die der Browser als Folge bestimmter Methodenaufrufe auslöst, zum Beispiel focus nach HTMLElement.focus(). In diesen Fällen ist der Wert true.
Ereignisse, die ein Skript selbst erzeugt – etwa mit new Event(), new CustomEvent() oder new MouseEvent() – und dann über EventTarget.dispatchEvent() auslöst, haben immer isTrusted === false. Eine wichtige Ausnahme ist HTMLElement.click(): Der Browser löst das click-Ereignis zwar selbst aus, markiert es aber trotzdem als nicht vertrauenswürdig (false).
In der Praxis nutzt man isTrusted, um echte Benutzereingaben von simulierten zu unterscheiden. Beispiele sind Analyse-Code, einfache Schutzmaßnahmen gegen automatisierte Klicks oder Logik, die nur bei echter Interaktion laufen soll. Der Browser selbst verwendet diese Markierung ebenfalls: Viele Aktionen, die eine Benutzeraktivierung voraussetzen (Pop-ups, Vollbild, Audiowiedergabe, Zugriff auf die Zwischenablage), funktionieren nur als Reaktion auf vertrauenswürdige Ereignisse.
Rückgabewert
true, wenn der User-Agent das Ereignis erzeugt hat; false, wenn es per Skript erzeugt und mit dispatchEvent() ausgelöst wurde (oder über HTMLElement.click() entstanden ist).Beispiele
Echten Klick von simuliertem Klick unterscheiden
const button = document.querySelector('#kaufen');
button.addEventListener('click', (event) => {
if (event.isTrusted) {
console.log('Echter Klick durch den Benutzer');
} else {
console.log('Simulierter Klick per Skript');
}
});
// Per Skript ausgelöst – nicht vertrauenswürdig
button.dispatchEvent(new MouseEvent('click', { bubbles: true }));
button.click();
Eigenes CustomEvent ist immer untrusted
const target = new EventTarget();
target.addEventListener('warenkorb:aktualisiert', (event) => {
console.log(event.detail.anzahl, event.isTrusted);
});
target.dispatchEvent(
new CustomEvent('warenkorb:aktualisiert', { detail: { anzahl: 3 } })
);
focus() erzeugt ein vertrauenswürdiges Ereignis
const input = document.querySelector('#suche');
input.addEventListener('focus', (event) => {
console.log('focus, isTrusted =', event.isTrusted);
});
// Der Browser löst das focus-Ereignis selbst aus
input.focus();
// Manuell erzeugtes focus-Ereignis
input.dispatchEvent(new FocusEvent('focus'));
Analyse: nur echte Interaktionen zählen
const zaehler = { echt: 0, simuliert: 0 };
document.addEventListener('click', (event) => {
event.isTrusted ? zaehler.echt++ : zaehler.simuliert++;
}, { capture: true });
document.body.click();
document.body.dispatchEvent(new Event('click'));
console.log(zaehler);
// Wichtig · Fallstricke
- Kein Sicherheitsmerkmal gegen den Client:
isTrustedschützt nur vor Skripten auf der Seite selbst. Browser-Erweiterungen, Automatisierungswerkzeuge (z. B. Puppeteer, Playwright oder WebDriver über echte Eingabe-Emulation) oder der Nutzer selbst können vertrauenswürdige Ereignisse erzeugen. Kritische Prüfungen gehören deshalb immer auf den Server. - Ausnahme
click(): Das vonHTMLElement.click()ausgelösteclick-Ereignis hatisTrusted === false, obwohl der Browser es auslöst. - Nicht fälschbar: Die Eigenschaft ist mit
[LegacyUnforgeable]als eigene Eigenschaft jeder Event-Instanz definiert, nicht auf dem Prototyp. Sie lässt sich weder mitObject.definePropertynoch über eine Unterklasse überschreiben. - Benutzeraktivierung: Ein untrusted Ereignis schaltet keine Funktionen frei, die eine Benutzergeste erfordern, zum Beispiel
window.open()ohne Pop-up-Blocker,requestFullscreen()odernavigator.clipboard.writeText(). - Barrierefreiheit: Unterstützende Technologien können Ereignisse auslösen, die anders markiert sind als erwartet. Blockiere untrusted Ereignisse deshalb nicht pauschal.
- Kompatibilität: Wird in allen modernen Browsern unterstützt (Chrome, Edge, Firefox, Safari). Sehr alte Browser wie der Internet Explorer liefern die Eigenschaft nicht oder nur unvollständig.