Modify Clipboard content after copy event: JavaScript, jQuery
The currently accepted answer is overly complicated, and causes weird behavior where a user's selection is removed after copy.
Here is a much simpler solution:
document.addEventListener('copy', function(e){
var text = window.getSelection().toString().replace(/[\n\r]+/g, '');
e.clipboardData.setData('text/plain', text);
e.preventDefault();
});
To resolve this issue what I have done on copy
event I have bind a function i.e. copyToClipboard
which creates a textarea
at run time, copy modified clipboard data to this text area and then execute a 'CUT' command (to avoid recursive call on copy event). And finally deleting textarea element in finally block.
Code:
$(document).bind('copy', function () {
var text = window.getSelection().toString().replace(/[\n\r]+/g, '');
copyToClipboard(text);
});
function copyToClipboard(text) {
var textarea = document.createElement("textarea");
textarea.textContent = text;
textarea.style.position = "fixed";
document.body.appendChild(textarea);
textarea.select();
try {
return document.execCommand("cut");
} catch (ex) {
console.warn("Copy to clipboard failed.", ex);
return false;
} finally {
document.body.removeChild(textarea);
}
}
There are two things I can find out.
- clipboardData object will be in callback object
e
passed not inwindow
. - the correct syntax for setData is like below.
For further reference copy Event MDN
document.addEventListener('copy', function(e) {
console.log('copied');
e.clipboardData.setData('text/plain', 'Hello World!');
e.preventDefault();
});