Aktuellen Inhalt der Zwischenablage abrufen? [geschlossen]

106

Ich möchte wissen, wie mein Skript den Inhalt der Zwischenablage erkennen und beim Öffnen der Seite in ein Textfeld einfügen kann, ohne dass der Benutzer etwas eingibt. Wie geht das?

Gabriele Cirulli
quelle
Sie können nicht wirklich wissen, was sich in der Zwischenablage eines Benutzers befindet, es sei denn, Sie haben beim Kopieren des Textes eine Art Flash-Backend verwendet. ------- Update: Eine korrektere Antwort hier
Naftali aka Neal

Antworten:

74

window.clipboardData.getData('Text')funktioniert in einigen Browsern. In vielen Browsern, in denen dies funktioniert, wird der Benutzer jedoch gefragt, ob die Webseite Zugriff auf die Zwischenablage haben soll oder nicht.

Dave
quelle
17
Funktioniert dies in einem anderen Browser als Internet Explorer?
Anderson Green
6
Wahrscheinlich nicht. Siehe diese Frage: stackoverflow.com/questions/400212/…
Dave
7
Sie können die Kompatibilität hier überprüfen caniuse.com/#search=clipboardData
Sergey Novikov
1
Eine bessere Lösung besteht darin, das Knotenobjekt zu erhalten, nicht jedoch das Fensterobjekt. Siehe hier
rplaurindo
66

Verwenden Sie die neue Zwischenablage-API über navigator.clipboard. Es kann folgendermaßen verwendet werden:

navigator.clipboard.readText()
  .then(text => {
    console.log('Pasted content: ', text);
  })
  .catch(err => {
    console.error('Failed to read clipboard contents: ', err);
  });

Oder mit asynchroner Syntax:

const text = await navigator.clipboard.readText();

Beachten Sie, dass der Benutzer dadurch ein Dialogfeld mit einer Berechtigungsanforderung erhält, sodass keine lustigen Geschäfte möglich sind.

(HINWEIS: Dies funktioniert nicht, wenn es von der Konsole aus aufgerufen wird, erfordert jedoch eine direkte Benutzeraktion wie das Drücken einer Taste, danke @Artur)

Mehr dazu

Spec

iuliu.net
quelle
18
Beachten Sie, dass beim Aufruf von der Konsole immer ein Fehler auftritt. Aber es tut Arbeit auf einer direkten Aktion des Benutzers, wie wenn Sie eine Taste auf der Seite drücken.
Klesun
Dies scheint nur einfachen Text zurückzugeben ... selbst wenn sich Rich Text in der Zwischenablage befindet. Wie kann ich das bekommen? \
Michael
@ Michael, Unterstützung für Bilder und andere wurde gerade in der letzten Chrome-Version (76)
hinzugefügt
Sie können in der Konsole testen, indem Sie ein einschließen setTimeoutund dann wieder auf die Seite klicken.
Edbentley
18

Sie können verwenden

window.clipboardData.getData('Text')

um den Inhalt der Zwischenablage des Benutzers im IE abzurufen. In anderen Browsern müssen Sie möglicherweise Flash verwenden, um den Inhalt abzurufen, da es keine Standardschnittstelle für den Zugriff auf die Zwischenablage gibt. Möglicherweise können Sie dieses Plugin Zero Clipboard ausprobieren

Ricky Jiao
quelle
1
Link funktioniert gut (wieder)
stephanos
5
ZeroClipboard können Sie nur kopieren , um die Zwischenablage, nicht lesen von ihm.
DSimon
5

Im Folgenden erhalten Sie den ausgewählten Inhalt sowie die Aktualisierung der Zwischenablage.

Binden Sie die Element-ID an das Kopierereignis und rufen Sie den ausgewählten Text ab. Sie können den Text ersetzen oder ändern. Holen Sie sich die Zwischenablage und legen Sie den neuen Text fest. Um die genaue Formatierung zu erhalten, müssen Sie den Typ als "text / hmtl" festlegen. Sie können es auch anstelle des Elements an das Dokument binden.

      $(ElementId).bind('copy', function(event) {
        var selectedText = window.getSelection().toString(); 
        selectedText = selectedText.replace(/\u200B/g, "");

        clipboardData = event.clipboardData || window.clipboardData || event.originalEvent.clipboardData;
        clipboardData.setData('text/html', selectedText);

        event.preventDefault();
      });
Sollymanul Islam
quelle
18
Willkommen auf dieser Seite! Ich bin froh, dass Sie einen Beitrag leisten, indem Sie eine Frage beantworten. Beachten Sie jedoch, dass Ihre Antwort die Frage des OP nicht wirklich beantwortet. Die Frage ist , Inhalte aus der Zwischenablage abzurufen und beim Öffnen einer Seite irgendwo einzufügen. Da die Frage kein jquery- Tag enthält, sollten Antworten mit jQuery den Hinweis enthalten, dass eine Bibliothek (jQuery) verwendet wird.
KarelG