Das Ausschneiden und Einfügen von Text ist eine der am häufigsten verwendeten Funktionen von Apps im Allgemeinen und Desktop-Anwendungen im Besonderen. Wie kopiere ich Text im Web? Es gibt einen alten und einen neuen Weg. Das hängt davon ab, welcher Browser verwendet wird.
Die moderne Art
Async Clipboard API verwenden
Die Methode Clipboard.writeText()
verwendet einen String und gibt ein Promise-Objekt zurück, das aufgelöst wird, wenn Text erfolgreich in die Zwischenablage geschrieben wurde. Clipboard.writeText()
kann nur vom window
-Objekt verwendet werden, das im Fokus ist.
Die klassische Art
document.execCommand()
verwenden
Beim Aufrufen von document.execCommand('copy')
wird ein boolescher Wert zurückgegeben, der angibt, ob der Kopiervorgang erfolgreich war. Rufen Sie diesen Befehl innerhalb einer Nutzergeste auf, z. B. mit einem Klick-Handler. Dieser Ansatz hat im Vergleich zur Async Clipboard API Einschränkungen. Die Methode execCommand()
funktioniert nur mit DOM-Elementen. Da der Vorgang synchron ist, kann das Kopieren großer Datenmengen die Seite blockieren, insbesondere Daten, die transformiert oder bereinigt werden müssen.
Progressive Enhancement
const copyButton = document.querySelector('#copyButton');
const out = document.querySelector('#out');
if ('clipboard' in navigator) {
copyButton.addEventListener('click', () => {
navigator.clipboard.writeText(out.value)
.then(() => {
console.log('Text copied');
})
.catch((err) => console.error(err.name, err.message));
});
} else {
copyButton.addEventListener('click', () => {
const textArea = document.createElement('textarea');
textArea.value = out.value;
textArea.style.opacity = 0;
document.body.appendChild(textArea);
textArea.focus();
textArea.select();
try {
const success = document.execCommand('copy');
console.log(`Text copy was ${success ? 'successful' : 'unsuccessful'}.`);
} catch (err) {
console.error(err.name, err.message);
}
document.body.removeChild(textArea);
});
}
Weitere Informationen
- Blockierung des Zugriffs auf die Zwischenablage aufheben (modern)
- Befehle zum Ausschneiden und Kopieren (klassisch)
Demo
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link
rel="icon"
href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>🎉</text></svg>"
/>
<title>How to copy text</title>
</head>
<body>
<h1>How to copy text</h1>
<textarea rows="3">
Some sample text for you to copy. Feel free to edit this.</textarea
>
<button type="button">Copy</button>
</body>
</html>
CSS
:root {
color-scheme: dark light;
}
html {
box-sizing: border-box;
}
*,
*:before,
*:after {
box-sizing: inherit;
}
body {
margin: 1rem;
font-family: system-ui, sans-serif;
}
button {
display: block;
}
JS
const textarea = document.querySelector('textarea');
const button = document.querySelector('button');
button.addEventListener('click', async () => {
try {
await navigator.clipboard.writeText(textarea.value);
} catch (err) {
console.error(err.name, err.message);
}
});