Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

Clipboard: write() Methode

Baseline 2024
Neu verfügbar

Seit Juni 2024 funktioniert diese Funktion auf aktuellen Geräten und in aktuellen Browserversionen. Auf älteren Geräten oder in älteren Browsern funktioniert sie möglicherweise nicht.

Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.

Die write() Methode des Clipboard-Interfaces schreibt beliebige ClipboardItem-Daten wie Bilder und Text in die Zwischenablage und erfüllt das zurückgegebene Promise, wenn der Vorgang abgeschlossen ist. Dies kann zur Implementierung von Ausschneide- und Kopierfunktionen verwendet werden.

Die Methode kann theoretisch beliebige Daten schreiben (im Gegensatz zu writeText(), das nur Text schreiben kann). Browser unterstützen häufig das Schreiben von Text, HTML und PNG-Bilddaten.

Syntax

js
write(data)

Parameter

data

Ein Array von ClipboardItem-Objekten, die die in die Zwischenablage zu schreibenden Daten enthalten.

Rückgabewert

Ein Promise, das aufgelöst wird, wenn die Daten in die Zwischenablage geschrieben wurden. Beachten Sie, dass, wenn das zugrunde liegende Betriebssystem keine mehrere nativen Zwischenablageelemente auf der Systemzwischenablage unterstützt, nur das erste ClipboardItem im Array geschrieben wird.

Das Promise wird abgelehnt, wenn es nicht möglich ist, in die Zwischenablage zu schreiben.

Ausnahmen

NotAllowedError DOMException

Wird ausgelöst, wenn das Schreiben in die Zwischenablage nicht erlaubt ist.

Sicherheitsüberlegungen

Das Schreiben in die Zwischenablage kann nur in einem sicheren Kontext erfolgen.

Weitere Sicherheitsanforderungen sind im Abschnitt Sicherheitsüberlegungen des API-Übersichtsthemas behandelt.

Beispiele

Text in die Zwischenablage schreiben

Diese Beispielmethode ersetzt den aktuellen Inhalt der Zwischenablage durch eine angegebene Zeichenkette, wenn eine Schaltfläche gedrückt wird. Beachten Sie, dass Sie für diesen speziellen Fall ebenso gut Clipboard.writeText() verwenden könnten.

js
button.addEventListener("click", () => setClipboard("<empty clipboard>"));

async function setClipboard(text) {
  const type = "text/plain";
  const clipboardItemData = {
    [type]: text,
  };
  const clipboardItem = new ClipboardItem(clipboardItemData);
  await navigator.clipboard.write([clipboardItem]);
}

Die Funktion setClipboard() spezifiziert einen "text/plain" MIME-Typ in der type Konstante und dann ein clipboardItemData Objekt mit einer einzigen Eigenschaft — deren Schlüssel der MIME-Typ ist und deren Wert der übergebene Text ist, den wir in die Zwischenablage schreiben möchten. Anschließend konstruieren wir ein neues ClipboardItem Objekt, in das das clipboardItemData Objekt übergeben wird.

Schließlich wird write() mit await aufgerufen, um die Daten in die Zwischenablage zu schreiben.

Canvas-Inhalte in die Zwischenablage schreiben

Dieses Beispiel zeichnet ein blaues Rechteck auf die Canvas. Sie können auf das Rechteck klicken, um den Inhalt der Canvas als Bild in die Zwischenablage zu kopieren, und dann ein anderes Element auswählen und den Inhalt aus der Zwischenablage einfügen.

HTML

Das HTML definiert nur unser <canvas>-Element und das <div>-Element mit der ID target, in das das Canvas-Bild eingefügt wird.

html
<canvas id="canvas" width="100" height="100"></canvas>

<div id="target">Paste here.</div>
js
const logElement = document.querySelector("#log");
function log(text) {
  logElement.innerText = `${logElement.innerText}${text}\n`;
  logElement.scrollTop = logElement.scrollHeight;
}

JavaScript

Wir definieren zuerst eine async Funktion, um eine Canvas in ein Blob zu kopieren. Dies umschließt die alte Callback-basierte Methode HTMLCanvasElement.toBlob() in die intuitivere, auf Promise basierende Funktion.

js
// Async/await method replacing toBlob() callback
async function getBlobFromCanvas(canvas) {
  return new Promise((resolve, reject) => {
    canvas.toBlob((blob) => {
      if (blob) {
        resolve(blob);
      } else {
        reject(new Error("Canvas toBlob failed"));
      }
    });
  });
}

Als nächstes richten wir unser Canvas ein und fügen einen Event-Listener für das click-Event hinzu.

Wenn Sie auf das blaue Rechteck klicken, wird die Canvas, die das Rechteck anzeigt, in ein Blob kopiert, und dann wird das Blob einem ClipboardItem hinzugefügt und dann in die Zwischenablage geschrieben.

js
const canvas = document.getElementById("canvas");

// Set up canvas
const ctx = canvas.getContext("2d");
ctx.fillStyle = "cornflowerblue";
ctx.fillRect(0, 0, 100, 100);

canvas.addEventListener("click", copyCanvasContentsToClipboard);
const target = document.getElementById("target");

async function copyCanvasContentsToClipboard() {
  // Copy canvas to blob
  try {
    const blob = await getBlobFromCanvas(canvas);
    // Create ClipboardItem with blob and its type, and add to an array
    const data = [new ClipboardItem({ [blob.type]: blob })];
    // Write the data to the clipboard
    await navigator.clipboard.write(data);
    log("Copied");
  } catch (error) {
    log(error);
  }
}

Beachten Sie, dass Sie, wenn Sie einen weniger verbreiteten Dateityp abholen oder eine Ressource, deren Typ Sie im Voraus nicht kennen, möglicherweise ClipboardItem.supports() verwenden möchten, um zu überprüfen, ob der Dateityp unterstützt wird, und eine aussagekräftige Fehlermeldung an den Benutzer ausgeben, falls dies nicht der Fall ist.

Wir definieren dann einen Event-Listener für paste events auf dem Element, in dem wir die Zwischenablageinhalte als Bild anzeigen möchten. Die FileReader API ermöglicht es uns, das Blob mit der Methode readAsDataURL zu lesen und ein <img>-Element mit den Canvas-Inhalten zu erstellen:

js
target.addEventListener("paste", (event) => {
  const items = (event.clipboardData || window.clipboardData).items;
  const blob = items[0].getAsFile();
  const reader = new FileReader();

  reader.addEventListener("load", (event) => {
    const img = new Image();
    img.src = event.target.result;
    target.appendChild(img);
  });

  reader.readAsDataURL(blob);
});

Ergebnis

Das Ergebnis wird unten angezeigt. Klicken Sie zuerst auf das blaue Quadrat und wählen Sie dann den Text "Hier einfügen" und verwenden Sie Ihre OS-spezifischen Tastenkombinationen, um aus der Zwischenablage einzufügen (wie Strg+V auf Windows).

Spezifikationen

Spezifikation
Clipboard API and events
# dom-clipboard-write

Browser-Kompatibilität

Siehe auch