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

View in English Always switch to English

Mit der Zwischenablage interagieren

Sie arbeiten in Erweiterungen mit der Zwischenablage unter Verwendung der Web-API-Methode navigator.clipboard und der Erweiterungsberechtigungen "clipboardRead" oder "clipboardWrite". navigator.clipboard ermöglicht Ihrer Erweiterung, beliebige Daten aus der Zwischenablage zu lesen und in sie zu schreiben.

Hinweis: Die Web-API-Methode document.execCommand wurde verwendet, um Zwischenablagenfunktionen bereitzustellen. Allerdings sind document.execCommand("copy"), document.execCommand("cut") und document.execCommand("paste") veraltet, und es wird nicht mehr garantiert, dass sie in irgendeinem Browser funktionieren oder verfügbar sind. Diese Funktionen werden in diesem Artikel aus historischen Gründen dokumentiert.

Die API navigator.clipboard bietet Methoden für:

Hinweis: Die Schreib- und Lesemethoden der Clipboard API sind nur in sicheren Kontexten verfügbar. Ihre Erweiterung kann sie nicht aus einem Content-Script verwenden, das auf http:-Seiten ausgeführt wird; sie können nur von https:-Seiten aus verwendet werden.

In die Zwischenablage schreiben

Die Clipboard-API-Methoden navigator.clipboard.write() und navigator.clipboard.writeText() schreiben beliebige Inhalte in die Zwischenablage. Die Methoden sind in einem sicheren Kontext verfügbar, funktionieren jedoch nur, nachdem der Benutzer der Erweiterung eine transiente Aktivierung durchgeführt hat. Mit der Berechtigung "clipboardWrite" ist jedoch keine transiente Aktivierung erforderlich.

Hinweis: In Firefox und Chrome ermöglicht die Berechtigung "clipboardWrite" das Schreiben in die Zwischenablage aus allen Erweiterungskontexten und Content-Scripts. In Safari wird die Berechtigung "clipboardWrite" nur in Erweiterungskontexten unterstützt (nicht in Content-Scripts).

Diese Funktion nimmt einen String entgegen und schreibt ihn in die Zwischenablage:

js
function updateClipboard(newClip) {
  navigator.clipboard.writeText(newClip).then(
    () => {
      /* clipboard successfully set */
    },
    () => {
      /* clipboard write failed */
    },
  );
}

execCommand() verwenden

Hinweis: document.execCommand("copy") und document.execCommand("cut") sind veraltet, und es wird nicht mehr garantiert, dass sie in irgendeinem Browser funktionieren oder verfügbar sind.

Die Befehle "cut" und "copy" der Methode document.execCommand() werden verwendet, um den Inhalt der Zwischenablage durch das ausgewählte Material zu ersetzen. Erweiterungen können diese Befehle ohne besondere Berechtigung in kurzlebigen Event-Handlern verwenden, die durch Benutzeraktionen ausgelöst werden (beispielsweise ein Click-Handler).

Nehmen wir beispielsweise an, Sie haben ein Popup, das dieses HTML enthält:

html
<input id="input" type="text" /> <button id="copy">Copy</button>

Um die Schaltfläche "copy" den Inhalt des <input>-Elements kopieren zu lassen, können Sie folgenden Code verwenden:

js
function copy() {
  let copyText = document.querySelector("#input");
  copyText.select();
  document.execCommand("copy");
}

document.querySelector("#copy").addEventListener("click", copy);

Da sich der Aufruf von execCommand() innerhalb eines Click-Event-Handlers befindet, benötigt Ihre Erweiterung keine besonderen Berechtigungen.

Betrachten Sie jedoch das Beispiel, bei dem Ihre Erweiterung das Kopieren durch einen Alarm auslöst:

js
function copy() {
  let copyText = document.querySelector("#input");
  copyText.select();
  document.execCommand("copy");
}

browser.alarms.create({
  delayInMinutes: 0.1,
});

browser.alarms.onAlarm.addListener(copy);

Abhängig vom Browser funktioniert dies möglicherweise nicht. In Firefox funktioniert es nicht, und in der Konsole wird eine Meldung wie diese angezeigt:

document.execCommand('cut'/'copy') was denied because it was not called from inside a short running user-generated event handler.

Um diesen Anwendungsfall zu ermöglichen, muss Ihre Erweiterung die Berechtigung "clipboardWrite" anfordern: "clipboardWrite" ermöglicht Ihrer Erweiterung, außerhalb eines kurzlebigen Event-Handlers für eine Benutzeraktion in die Zwischenablage zu schreiben.

Hinweis: document.execCommand() funktioniert nicht bei Eingabefeldern vom Typ type="hidden", mit dem HTML5-Attribut "hidden" oder einer passenden CSS-Regel mit "display: none;". Um einer span-, div- oder p-Markierung eine Schaltfläche zum Kopieren in die Zwischenablage hinzuzufügen, müssen Sie eine Umgehungslösung verwenden, beispielsweise indem Sie die Position der Eingabe auf absolut setzen und sie aus dem Viewport verschieben.

Aus der Zwischenablage lesen

Die Clipboard-API-Methoden navigator.clipboard.read() und navigator.clipboard.readText() lesen beliebigen Text oder binäre Daten aus der Zwischenablage. Diese Methoden ermöglichen Erweiterungen den Zugriff auf Daten in der Zwischenablage, ohne sie in ein bearbeitbares Element einzufügen.

Die Methoden sind in einem sicheren Kontext verfügbar, funktionieren jedoch nur, nachdem der Benutzer der Erweiterung eine transiente Aktivierung durchgeführt und in einem temporären Kontextmenü auf eine Einfügeaufforderung geklickt hat. Mit der Berechtigung "clipboardRead" kann Ihre Erweiterung jedoch ohne Benutzerbestätigung oder transiente Aktivierung aus der Zwischenablage lesen.

Hinweis: In Firefox und Chrome ermöglicht die Berechtigung "clipboardRead" das Schreiben in die Zwischenablage aus allen Erweiterungskontexten und Content-Scripts. Safari unterstützt die Berechtigung "clipboardRead" nicht.

Dieser Codeausschnitt ruft den Text aus der Zwischenablage ab und ersetzt den Inhalt des Elements mit der ID "outbox" durch diesen Text.

js
navigator.clipboard
  .readText()
  .then((clipText) => (document.getElementById("outbox").innerText = clipText));

execCommand() verwenden

Hinweis: document.execCommand(&#34;paste&#34;) ist veraltet, und es wird nicht mehr garantiert, dass es in irgendeinem Browser funktioniert oder verfügbar ist.

Um document.execCommand(&#34;paste&#34;) zu verwenden, benötigt Ihre Erweiterung die Berechtigung "clipboardRead". Diese Anforderung besteht auch dann, wenn Sie den Befehl "paste" innerhalb eines vom Benutzer generierten Event-Handlers verwenden, beispielsweise click oder keypress.

Betrachten Sie HTML, das Folgendes enthält:

html
<textarea id="output"></textarea> <button id="paste">Paste</button>

Um den Inhalt des <textarea>-Elements mit der ID "output" aus der Zwischenablage zu setzen, wenn der Benutzer auf die <button>-Schaltfläche "paste" klickt, können Sie folgenden Code verwenden:

js
function paste() {
  let pasteText = document.querySelector("#output");
  pasteText.focus();
  document.execCommand("paste");
  console.log(pasteText.textContent);
}
document.querySelector("#paste").addEventListener("click", paste);

Browserspezifische Überlegungen

In Chrome:

  • Chrome stellt navigator.clipboard nicht für Erweiterungs-Service-Worker bereit, und Offscreen-Dokumente können aufgrund der Anforderungen der API an den Dokumentfokus nicht auf navigator.clipboard zugreifen. Daher müssen Chrome-Erweiterungen die veralteten document.execCommand()-APIs in einem Offscreen-Dokument verwenden oder navigator.clipboard in einem anderen Kontext nutzen, beispielsweise einem Content-Script oder einer Erweiterungsseite. Damit Seitenskripte ohne Benutzerinteraktion in die Zwischenablage schreiben können, muss die Berechtigung "clipboard-write" über die Web-API navigator.permissions angefordert werden. Ihre Erweiterung kann diese Berechtigung mit navigator.permissions.query() überprüfen:

    js
    navigator.permissions.query({ name: "clipboard-write" }).then((result) => {
      if (result.state === "granted" || result.state === "prompt") {
        /* write to the clipboard now */
      }
    });
    

    Hinweis: Die Berechtigung clipboard-write wird in Firefox und Safari nicht unterstützt.

In Firefox:

  • Die Verfügbarkeit der Lese-Methoden der Clipboard API nach der Reaktion des Benutzers auf eine Einfügeaufforderung wurde für Webseiten in Firefox 127 und für Erweiterungen in Firefox 147 eingeführt. Davor waren die Methoden nur verfügbar, wenn die Berechtigung "clipboardRead" gesetzt war.

In Safari:

  • Die Berechtigung "clipboardWrite" wird nur in Erweiterungskontexten unterstützt (nicht in Content-Scripts).
  • Die Berechtigung "clipboardRead" wird nicht unterstützt.

Browser-Kompatibilität

api.Clipboard

webextensions.api.clipboard

Siehe auch