Теперь есть API-интерфейс буфера обмена, который вы должны использовать вместо создания элементов dom и вызова execCommand
, который больше не работает, но я не исследовал, чтобы быть уверенным.
document.querySelector('button').addEventListener('click', () => {
let copyText = 'Random ' + Math.random();
navigator.permissions.query({name: "clipboard-write"})
.then(result => result.state == "granted" || result.state == "prompt")
.then(() => navigator.clipboard.writeText(copyText))
.then(() => console.log('Copied:', copyText))
.catch(e => console.log('Failed to copy because:', e));
});
<button>Copy random text</button>