Start · Sprachen · JavaScript · Referenz · Event.isTrusted

Event.isTrusted

Eigenschaft

Schreibgeschützter Boolean: <code>true</code>, wenn der Browser das Ereignis ausgelöst hat, <code>false</code>, wenn es per Skript mit <code>dispatchEvent()</code> ausgelöst wurde.

seit JavaScript DOM Level 3 / Baseline: alle modernen Browser Kategorie: webapi

Signatur

Event.isTrusted

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

Typ
boolean
Beschreibung
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();
Simulierter Klick per Skript Simulierter Klick per Skript (Bei echtem Mausklick: "Echter Klick durch den Benutzer")

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 } })
);
3 false

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'));
focus, isTrusted = true focus, isTrusted = false

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);
{ echt: 0, simuliert: 2 }

// Wichtig · Fallstricke

  • Kein Sicherheitsmerkmal gegen den Client: isTrusted schü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 von HTMLElement.click() ausgelöste click-Ereignis hat isTrusted === 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 mit Object.defineProperty noch ü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() oder navigator.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.