2014-10-13 9 views
28

Desidero utilizzare una funzione di copia su clip in HTML5, ma senza utilizzare il flash. È possibile? Come?Come posso copiare negli appunti in HTML5 senza usare il flash?

ho cercato di implementare una funzione di copia-to-clipboad con JavaScript, ma non funziona:

function Copytoclipboard() { 
    var body = document.body, 
     range, sel; 
    if (document.createRange && window.getSelection) { 
     range = document.createRange(); 
     sel = window.getSelection(); 
     sel.removeAllRanges(); 
     try { 
      range.selectNodeContents(el); 
      sel.addRange(range); 
      document.execCommand('Copy'); 
     } catch (e) { 
      range.selectNode(el); 
      sel.addRange(range); 
      document.execCommand('Copy'); 
     } 
    } else if (body.createTextRange) { 
     range = body.createTextRange(); 
     range.moveToElementText(el); 
     range.select(); 
     range.execCommand('Copy'); 
    } 
} 

risposta

25

È possibile utilizzare il HTML5 clipboard apihttp://www.htmlgoodies.com/html5/other/working-with-clipboard-apis-in-html5-web-apps.html#fbid=eh9tM7GHJWF

Ma fanno notare che non tutti i browser pienamente supporto it of now: http://caniuse.com/#feat=clipboard

+9

"Non completamente supporto" è un modo per dirlo. Inutilizzabile è un altro. Chrome, Safari, Opera non supportano EventConstructor che sembra essenziale se vuoi copiare qualcosa negli appunti. –

+3

Ma risponde alla domanda. L'utente ha richiesto html5. –

+0

E il supporto per tutti i diversi browser sui dispositivi mobili? Ce n'è un milione. Sembra che le previsioni su HTML5 riguardino maggiormente l'hype e che le promesse non mantenute siano diventate realtà. Se non riusciamo ancora a ottenere questa semplice micro-funzionalità funzionante in modo coerente nel 2015, andremo tutti in pensione prima che queste cose "funzionino"? Dopotutto, l'architettura dei plug-in non era poi così male. Funziona alla grande per Eclipse. – User

17

Non funziona perché richiede un'interazione dell'utente come il clic. Altrimenti, document.execCommand non funzionerà. Potresti anche voler controllare clipboard.js, è una libreria super facile da copiare testo negli appunti che non richiede Flash.

+0

Grazie per la lib, funziona in chrome – userlond

+0

Non la risposta pertinente, ma l'approccio migliore. Upvoted. –

15

AGGIORNAMENTO: Questa soluzione funziona anche in Safari.

Non penso che ci sia ancora una soluzione per browser non flash per questo. Ecco una soluzione che funziona in almeno le ultime versioni di Chrome, Firefox, ed Edge:

function copyText(text){ 
 
    function selectElementText(element) { 
 
    if (document.selection) { 
 
     var range = document.body.createTextRange(); 
 
     range.moveToElementText(element); 
 
     range.select(); 
 
    } else if (window.getSelection) { 
 
     var range = document.createRange(); 
 
     range.selectNode(element); 
 
     window.getSelection().removeAllRanges(); 
 
     window.getSelection().addRange(range); 
 
    } 
 
    } 
 
    var element = document.createElement('DIV'); 
 
    element.textContent = text; 
 
    document.body.appendChild(element); 
 
    selectElementText(element); 
 
    document.execCommand('copy'); 
 
    element.remove(); 
 
} 
 

 

 
var txt = document.getElementById('txt'); 
 
var btn = document.getElementById('btn'); 
 
btn.addEventListener('click', function(){ 
 
    copyText(txt.value); 
 
})
<input id="txt" /> 
 
<button id="btn">Copy To Clipboard</button>

Nota: Cercando di utilizzare questa soluzione per copiare una stringa vuota o una stringa che è solo gli spazi non funzioneranno.

+1

Reallly mi ha salvato il tempo, grazie: * –

3

Se non ti interessa che i contenuti del campo di testo vengano selezionati prima della copia, ecco una soluzione a due linee che funziona almeno in Chrome 56 e Edge, ma scommetto che funzioni anche in altri browser .

function clickListener() { 
 
    document.getElementById('password').select(); 
 
    document.execCommand('copy'); 
 
} 
 

 
document.getElementById('copy_btn').addEventListener('click', clickListener);
<input id=password value="test"> 
 
<button id=copy_btn>Copy</button>

https://jsfiddle.net/uwd0rm08/

+0

http://caniuse.com/#feat=document-execcommand – Ouroborus

5

funzione per l'inserimento di testo nella clipboard:

function copyStringToClipboard (string) { 
    function handler (event){ 
     event.clipboardData.setData('text/plain', string); 
     event.preventDefault(); 
     document.removeEventListener('copy', handler, true); 
    } 

    document.addEventListener('copy', handler, true); 
    document.execCommand('copy'); 
} 
+0

FYI probabilmente funzionerà su tutti i browser di oggi. Per IE funzionerebbe semplicemente 'window.clipboardData.setData (" Text ", string)'. – Binyamin

Problemi correlati