Clipboard API-Nutzungsleitfaden mit Claude Code
Erfahren Sie, wie Sie die Clipboard API mit Claude Code verwenden. Mit praktischen Tipps und Codebeispielen.
Benutzererfahrung mit der Clipboard API verbessern
Mit einem Klick Code kopieren oder Rich Text einfügen - die Clipboard API verbessert die Benutzerfreundlichkeit von Webanwendungen erheblich. Mit Claude Code können Sie schnell eine Implementierung erstellen, die Browserkompatibilität und Sicherheit berücksichtigt.
Kopier-Button für Codeblöcke
> Füge einen Kopier-Button zu Codeblöcken hinzu.
> Zeige nach dem Klick ein "Kopiert"-Feedback an.
// components/CopyButton.tsx
import { useState, useCallback } from 'react';
interface CopyButtonProps {
text: string;
}
export function CopyButton({ text }: CopyButtonProps) {
const [copied, setCopied] = useState(false);
const handleCopy = useCallback(async () => {
try {
await navigator.clipboard.writeText(text);
setCopied(true);
setTimeout(() => setCopied(false), 2000);
} catch (err) {
// Fallback
fallbackCopy(text);
setCopied(true);
setTimeout(() => setCopied(false), 2000);
}
}, [text]);
return (
<button
onClick={handleCopy}
className="absolute right-2 top-2 rounded bg-gray-700 px-2 py-1 text-xs text-white
transition-colors hover:bg-gray-600"
aria-label={copied ? 'Kopiert' : 'Code kopieren'}
>
{copied ? '✓ Kopiert' : 'Kopieren'}
</button>
);
}
function fallbackCopy(text: string): void {
const textarea = document.createElement('textarea');
textarea.value = text;
textarea.style.position = 'fixed';
textarea.style.opacity = '0';
document.body.appendChild(textarea);
textarea.select();
document.execCommand('copy');
document.body.removeChild(textarea);
}
Rich Text kopieren
// utils/clipboard.ts
export async function copyRichText(html: string, plainText: string): Promise<void> {
if (!navigator.clipboard?.write) {
fallbackCopy(plainText);
return;
}
const htmlBlob = new Blob([html], { type: 'text/html' });
const textBlob = new Blob([plainText], { type: 'text/plain' });
const item = new ClipboardItem({
'text/html': htmlBlob,
'text/plain': textBlob,
});
await navigator.clipboard.write([item]);
}
// Verwendungsbeispiel: Tabellendaten kopieren
async function copyTableAsHtml(data: string[][]) {
const html = `<table>${data.map(row =>
`<tr>${row.map(cell => `<td>${cell}</td>`).join('')}</tr>`
).join('')}</table>`;
const text = data.map(row => row.join('\t')).join('\n');
await copyRichText(html, text);
}
Aus der Zwischenablage lesen
// Bildverarbeitung beim Einfügen
async function handlePaste(e: ClipboardEvent): Promise<void> {
const items = e.clipboardData?.items;
if (!items) return;
for (const item of items) {
if (item.type.startsWith('image/')) {
e.preventDefault();
const blob = item.getAsFile();
if (blob) {
const url = URL.createObjectURL(blob);
insertImage(url);
}
}
}
}
// Berechtigungsprüfung mit Permissions API
async function checkClipboardPermission(): Promise<boolean> {
try {
const result = await navigator.permissions.query({
name: 'clipboard-read' as PermissionName,
});
return result.state === 'granted' || result.state === 'prompt';
} catch {
return false;
}
}
URL-Kopierfunktion zum Teilen
function ShareUrl({ url, title }: { url: string; title: string }) {
const [copied, setCopied] = useState(false);
const handleCopy = async () => {
await navigator.clipboard.writeText(url);
setCopied(true);
setTimeout(() => setCopied(false), 3000);
};
return (
<div className="flex items-center gap-2 rounded-lg border p-3">
<input
type="text"
value={url}
readOnly
className="flex-1 bg-transparent text-sm outline-none"
/>
<button
onClick={handleCopy}
className="rounded bg-blue-600 px-3 py-1 text-sm text-white hover:bg-blue-700"
>
{copied ? 'Kopiert!' : 'URL kopieren'}
</button>
</div>
);
}
Sicherheitsaspekte
// Einfügen mit Bereinigung
function sanitizePastedContent(html: string): string {
const div = document.createElement('div');
div.innerHTML = html;
// Script-Tags entfernen
div.querySelectorAll('script, iframe, object, embed').forEach(el => el.remove());
// Event-Handler-Attribute entfernen
div.querySelectorAll('*').forEach(el => {
Array.from(el.attributes)
.filter(attr => attr.name.startsWith('on'))
.forEach(attr => el.removeAttribute(attr.name));
});
return div.innerHTML;
}
Zusammenfassung
Durch den Einsatz der Clipboard API können Sie die UX von Funktionen wie Code-Block-Kopieren und Teilen erheblich verbessern. Mit Claude Code ist eine robuste Implementierung einschließlich Fallback-Verarbeitung und Sicherheitsmaßnahmen möglich. In Kombination mit der Web Share API können Sie noch flexiblere Sharing-Funktionen anbieten. Vergessen Sie auch nicht die Performance-Optimierung. Die detaillierte Spezifikation finden Sie in den MDN Web Docs.
Kostenloses PDF: Claude-Code-Spickzettel in 5 Minuten
Trag einfach deine E-Mail-Adresse ein – wir senden dir den A4-Spickzettel als PDF sofort zu.
Wir behandeln deine Daten sorgfältig und senden niemals Spam.
Über den Autor
Masa
Ingenieur, der Claude Code intensiv nutzt. Betreibt claudecode-lab.com, ein Tech-Medium in 10 Sprachen mit über 2.000 Seiten.
Ähnliche Artikel
7 CLAUDE.md-Vorlagen für Claude Code, die du in echte Projekte kopieren kannst
Sieben praktische CLAUDE.md-Vorlagen für Solo-Apps, Content-Sites, APIs, Team-Repos und Legacy-Code plus typische Fehler.
Claude Code Approval- und Sandbox-Leitfaden | Sichere Einstellungen fuer die taegliche Arbeit
Wie du Claude-Code-Aktionen in allow, ask, deny und sandbox aufteilst - mit brauchbaren Settings, Hooks und realen Arbeitsablaeufen.
Claude Code Komplettanleitung 2026 | In 7 Schritten vom Einstieg zur produktiven Nutzung
Die vollständige Einführung in Claude Code für Anfänger. Von der Installation bis zur Integration in den echten Entwickler-Workflow — mit allen Stolperfallen, auf die Masa anfangs gestoßen ist.