Chrome по-прежнему активно работает над реализацией этого API , и хотя спецификации требуют от UA поддержки нескольких типов MIME, в настоящее время они поддерживают только "text/plain"
и "image/png"
.
Так что на данный момент нам все еще приходится полагаться на уродливую execCommand('copy')
+ привязку события копирования для установки наших собственных данных ...
document.querySelector('button').onclick = (e) => {
const data = `A1,B1
A2,B2
A3,B3`;
document.oncopy = e => {
e.preventDefault(); // we handle it
const dT = e.clipboardData;
dT.setData( 'text/plain', 'this is plain text' ); // as plain text
dT.setData( 'text/csv', data ); // as csv
}
document.execCommand( 'copy' );
document.oncopy = null;
};
// to check what we have copied
document.querySelector('div[contenteditable]').onpaste = e => {
e.preventDefault();
const dT = e.clipboardData;
console.log( 'retrieved "%s" as csv', dT.getData('text/csv') );
console.log( 'retrieved "%s" as text', dT.getData('text/plain') );
};
<button>copy to clipboard</button>
<div contenteditable>paste here</div>
Хотя я должен отметить, что не пытался вставить это в MS Excel, поэтому я не знаю, решит ли это вашу проблему, но оба Google Таблицы и номера Apple смотрят только на значение plain / text , но могут автоматически распознавать CSV и TSV.