ho passato un sacco di tempo alla ricerca di una soluzione a questo problema anche. Ecco cosa ho trovato finora:
Se si desidera che gli utenti siano in grado di fare clic su un pulsante e copiare del testo, potrebbe essere necessario utilizzare Flash.
Se si desidera che gli utenti premano Ctrl + C in qualsiasi punto della pagina, ma copiano sempre xyz negli Appunti, ho scritto una soluzione all-JS in YUI3 (sebbene possa essere facilmente portato su altri framework o JS non formattato se ti senti particolarmente dispiaciuto di me stesso).
Si tratta di creare una casella di testo dallo schermo che viene evidenziata non appena l'utente preme Ctrl/CMD. Quando colpiscono "C" poco dopo, copiano il testo nascosto. Se colpiscono "V", vengono reindirizzati a un contenitore (a tua scelta) prima che l'evento paste venga attivato.
Questo metodo può funzionare bene, perché mentre si ascolta per i tasti Ctrl/CMD keydown qualsiasi parte del corpo, la 'A', 'C' o ascoltatori KeyDown 'V' attaccano solo per la casella di testo nascosto (e non il tutto il corpo). Inoltre, non ha bisogno di rompere le aspettative degli utenti - si viene reindirizzati alla casella nascosta solo se non è stato selezionato nulla da copiare comunque!
Ecco quello che ho a lavorare sul mio sito, ma controllare http://at.cg/js/clipboard.js per gli aggiornamenti se ci sono:
YUI.add('clipboard', function(Y) {
// Change this to the id of the text area you would like to always paste in to:
pasteBox = Y.one('#pasteDIV');
// Make a hidden textbox somewhere off the page.
Y.one('body').append('<input id="copyBox" type="text" name="result" style="position:fixed; top:-20%;" onkeyup="pasteBox.focus()">');
copyBox = Y.one('#copyBox');
// Key bindings for Ctrl+A, Ctrl+C, Ctrl+V, etc:
// Catch Ctrl/Window/Apple keydown anywhere on the page.
Y.on('key', function(e) {
copyData();
// Uncomment below alert and remove keyCodes after 'down:' to figure out keyCodes for other buttons.
// alert(e.keyCode);
// }, 'body', 'down:', Y);
}, 'body', 'down:91,224,17', Y);
// Catch V - BUT ONLY WHEN PRESSED IN THE copyBox!!!
Y.on('key', function(e) {
// Oh no! The user wants to paste, but their about to paste into the hidden #copyBox!!
// Luckily, pastes happen on keyPress (which is why if you hold down the V you get lots of pastes), and we caught the V on keyDown (before keyPress).
// Thus, if we're quick, we can redirect the user to the right box and they can unload their paste into the appropriate container. phew.
pasteBox.select();
}, '#copyBox', 'down:86', Y);
// Catch A - BUT ONLY WHEN PRESSED IN THE copyBox!!!
Y.on('key', function(e) {
// User wants to select all - but he/she is in the hidden #copyBox! That wont do.. select the pasteBox instead (which is probably where they wanted to be).
pasteBox.select();
}, '#copyBox', 'down:65', Y);
// What to do when keybindings are fired:
// User has pressed Ctrl/Meta, and is probably about to press A,C or V. If they've got nothing selected, or have selected what you want them to copy, redirect to the hidden copyBox!
function copyData() {
var txt = '';
// props to Sabarinathan Arthanari for sharing with the world how to get the selected text on a page, cheers mate!
if (window.getSelection) { txt = window.getSelection(); }
else if (document.getSelection) { txt = document.getSelection(); }
else if (document.selection) { txt = document.selection.createRange().text; }
else alert('Something went wrong and I have no idea why - please contact me with your browser type (Firefox, Safari, etc) and what you tried to copy and I will fix this immediately!');
// If the user has nothing selected after pressing Ctrl/Meta, they might want to copy what you want them to copy.
if(txt=='') {
copyBox.select();
}
// They also might have manually selected what you wanted them to copy! How unnecessary! Maybe now is the time to tell them how silly they are..?!
else if (txt == copyBox.get('value')) {
alert('This site uses advanced copy/paste technology, possibly from the future.\n \nYou do not need to select things manually - just press Ctrl+C! \n \n(Ctrl+V will always paste to the main box too.)');
copyBox.select();
} else {
// They also might have selected something completely different! If so, let them. It's only fair.
}
}
});
speranza che qualcun altro trova questo utile:]
Duplicato di http://stackoverflow.com/questions/400212/how-to-copy-to-clipboard-in-javascript? –
Come noto, non è possibile utilizzare js per accedere agli appunti in Firefox per impostazione predefinita. L'unico modo universale è flash, invece di js. – Rufus
@Rufus: Ma nel mio caso, devo fare a meno del flash. –