Strings in die Zwischenablage kopieren mit reinem Javascript

English Deutsch

Um einen String in die System-Zwischenablage im Browser zu kopieren, ohne eine Abhängigkeit wie clipboard.js zu verwenden, nutze diese Funktion:

copy_to_clipboard.js
function copyStringToClipboard (str) {
   // Neues Element erstellen
   var el = document.createElement('textarea');
   // Wert setzen (zu kopierender String)
   el.value = str;
   // Nicht-editierbar setzen, um Fokus zu vermeiden und aus dem Sichtbereich verschieben
   el.setAttribute('readonly', '');
   el.style = {position: 'absolute', left: '-9999px'};
   document.body.appendChild(el);
   // Text im Element auswählen
   el.select();
   // Text in die Zwischenablage kopieren
   document.execCommand('copy');
   // Temporäres Element entfernen
   document.body.removeChild(el);
}

Hinweis: Wenn der Benutzer etwas ausgewählt hat, wenn du die Funktion ausführst, wird diese Auswahl gelöscht. Wenn du die Auswahl erhalten musst, siehe diesen Hackernoon-Artikel für eine ausführlichere Lösung.

Du kannst es so verwenden:

copy_to_clipboard_usage.js
// Verwendungsbeispiel:
copyStringToClipboard("abc123");

Browser-Kompatibilität

Diese Lösung verwendet nur grundlegendes Javascript (keine ES6-Features erforderlich), die DOM-API, die seit Jahrzehnten existiert, und document.exec('copy');, was laut dem Mozilla Developer’s network mit allen großen Browsern kompatibel ist, einschließlich Internet Explorer ab IE9.

Funktionsweise

Wir erstellen ein neues <textarea>-Element, dessen Wert wir auf den zu kopierenden String setzen (z.B. "abc123" in unserem Verwendungsbeispiel oben).

Um den Benutzer und, wichtiger, Screenreader nicht zu verwirren, setzen wir es auf readonly und verschieben es -9999px nach links, was für alle praktischen Zwecke garantiert außerhalb des Viewports liegt.

Erst nach dem Verschieben des Elements außerhalb des Viewports fügen wir es zum DOM hinzu, damit es nicht einmal für den Bruchteil einer Sekunde angezeigt wird.

Nun können wir den Text im Element mit el.select() auswählen und mit document.execCommand('copy'); in die Zwischenablage kopieren.

Schließlich entfernen wir das Element aus dem DOM.

Credits an Angelos Charalis auf Hackernoon für die ursprüngliche Idee, das Element außerhalb des Viewports zu verschieben.


Check out similar posts by category: Javascript