Ottenere il contenuto corrente degli appunti? [chiuso]


106

Mi piacerebbe conoscere un modo per fare in modo che il mio script rilevi il contenuto degli appunti e lo incolli in un campo di testo quando la pagina viene aperta, senza input da parte dell'utente. Come si può fare?


Non puoi davvero sapere cosa c'è negli appunti di un utente a meno che tu non abbia usato una sorta di backend flash quando ha copiato il testo. ------- Aggiornamento: una risposta più corretta qui
Naftali aka Neal,



Risposte:


74

window.clipboardData.getData('Text')funzionerà in alcuni browser. Tuttavia, molti browser in cui funziona chiederanno all'utente se desidera o meno che la pagina web abbia accesso agli appunti.


17
Funzionerà in qualsiasi browser diverso da Internet Explorer?
Anderson Green

6
Probabilmente no. Vedi questa domanda: stackoverflow.com/questions/400212/…
Dave

7
Puoi verificare la compatibilità qui caniuse.com/#search=clipboardData
Sergey Novikov,

1
Una soluzione migliore è ottenuta dall'oggetto nodo, ma non dall'oggetto finestra. Vedi qui
rplaurindo

66

Usa la nuova API degli appunti , tramite navigator.clipboard. Può essere usato in questo modo:

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

O con sintassi asincrona:

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

Tieni presente che questo richiederà all'utente una finestra di dialogo per la richiesta di autorizzazione, quindi non sono possibili affari divertenti.

(NOTA: questo non funzionerà se chiamato dalla console, ma richiederà un'azione diretta da parte dell'utente come la pressione di un pulsante, grazie @Artur)

Altro su questo

Spec


18
Notare che risulta sempre in errore quando viene chiamato dalla console. Ma fa lavoro su un azione dell'utente diretta, come quando si preme un pulsante sulla pagina.
Klesun

questo sembra restituire solo testo normale ... anche quando il testo RTF è negli appunti. come posso ottenerlo? \
Michael

@Michael, il supporto per le immagini e altro è stato appena aggiunto nell'ultima versione di Chrome (76)
iuliu.net

Puoi eseguire il test nella console inserendo una setTimeout, quindi facendo clic di nuovo sulla pagina.
edbentley

18

Puoi usare

window.clipboardData.getData('Text')

per ottenere il contenuto degli appunti dell'utente in IE. Tuttavia, in altri browser potrebbe essere necessario utilizzare Flash per ottenere il contenuto, poiché non esiste un'interfaccia standard per accedere agli appunti. Forse puoi provare questo plugin Zero Clipboard


1
il collegamento funziona (di nuovo)
correttamente

5
ZeroClipboard consente solo di copiare al clipboard, non legge da esso.
DSimon

4

Di seguito ti fornirà il contenuto selezionato e aggiornerà gli appunti.

Associa l'id dell'elemento con l'evento di copia e quindi ottieni il testo selezionato. Potresti sostituire o modificare il testo. Prendi gli appunti e imposta il nuovo testo. Per ottenere la formattazione esatta è necessario impostare il tipo come "text / hmtl". Puoi anche associarlo al documento invece che all'elemento.

      $(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();
      });

20
Benvenuto in questo sito! Sono contento che tu contribuisca rispondendo a una domanda. Ma tieni presente che la tua risposta non risponde realmente alla domanda del PO. La domanda è recuperare il contenuto dagli appunti e incollarlo da qualche parte quando si apre una pagina. Inoltre, poiché la domanda non ha un tag jquery , le risposte con jQuery dovrebbero contenere una nota che indica che viene utilizzata una libreria (jQuery).
KarelG
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.