Signatur
Beschreibung
Der Konstruktor ClipboardEvent() erzeugt ein synthetisches Ereignis vom Typ ClipboardEvent. Es erbt von Event und stellt über die Eigenschaft clipboardData ein DataTransfer-Objekt bereit, das die betroffenen Daten der Zwischenablage enthält.
Praktisch nutzt man den Konstruktor vor allem in Tests (z. B. Unit-Tests für eigene paste-Handler), um ein Einfügen oder Kopieren zu simulieren, oder um innerhalb einer Anwendung eigene Zwischenablage-Logik über dispatchEvent() auszulösen.
Wichtig: Ein per Konstruktor erzeugtes und mit dispatchEvent() ausgelöstes Ereignis ist nicht vertrauenswürdig (isTrusted === false). Es verändert die echte System-Zwischenablage nicht und löst auch keine Standardaktion des Browsers aus – es ruft lediglich die registrierten Listener auf. Für echten Zugriff auf die Zwischenablage ist die asynchrone navigator.clipboard-API vorgesehen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $type Pflicht | string | Name des Ereignisses, üblicherweise "copy", "cut" oder "paste" (Groß-/Kleinschreibung beachten). |
|
| $options | object | {} | Optionales Objekt mit den Feldern aus EventInit (bubbles, cancelable, composed, jeweils Standard false) sowie clipboardData: ein DataTransfer-Objekt oder null (Standard). |
Rückgabewert
ClipboardEvent-Objekt, das mit dispatchEvent() ausgelöst werden kann.Beispiele
Einfaches ClipboardEvent erzeugen
const evt = new ClipboardEvent('copy', { bubbles: true, cancelable: true });
console.log(evt.type, evt.bubbles, evt.clipboardData);
Paste-Ereignis mit Daten in einem Test simulieren
const input = document.createElement('textarea');
document.body.append(input);
input.addEventListener('paste', (e) => {
e.preventDefault();
const text = e.clipboardData.getData('text/plain');
input.value = text.trim().toUpperCase();
});
const dt = new DataTransfer();
dt.setData('text/plain', ' hallo welt ');
input.dispatchEvent(new ClipboardEvent('paste', {
clipboardData: dt,
bubbles: true,
cancelable: true
}));
console.log(input.value);
Echte vs. synthetische Ereignisse unterscheiden
document.addEventListener('copy', (e) => {
console.log(e.isTrusted ? 'Vom Nutzer ausgelöst' : 'Synthetisch erzeugt');
});
document.dispatchEvent(new ClipboardEvent('copy'));
// Wichtig · Fallstricke
- Keine echte Zwischenablage: Synthetische Ereignisse lesen oder schreiben nie die System-Zwischenablage und lösen keine Standardaktion aus. Nutzen Sie dafür
navigator.clipboard.writeText()bzw.readText()(erfordert sicheren Kontext und ggf. Berechtigung). - DataTransfer-Konstruktor:
new DataTransfer()wird von allen modernen Browsern unterstützt; ältere Safari-Versionen (vor 14.1) und Firefox vor 62 ignoriertenclipboardDataim Konstruktor teils bzw. setzten es aufnull. - Testumgebungen: jsdom stellt
ClipboardEventundDataTransfernur eingeschränkt bereit – ggf. ist ein Polyfill oder Mock nötig. - Standardmäßig sind
bubblesundcancelablefalse; für Handler auf übergeordneten Elementen undpreventDefault()explizit auftruesetzen. - Sicherheit: Daten aus
clipboardDatain echtenpaste-Ereignissen sind Benutzereingaben – vor Einfügen perinnerHTMLunbedingt bereinigen (XSS-Gefahr, v. a. beitext/html).