JavaScript
Копирование текста в буфер обмена
Clipboard API с запасным вариантом для незащищённого контекста (http) и старых браузеров.
Код
async function copyToClipboard(text) {
if (navigator.clipboard && window.isSecureContext) {
await navigator.clipboard.writeText(text);
return true;
}
// Запасной путь: скрытое textarea + execCommand
const textarea = document.createElement('textarea');
textarea.value = text;
textarea.style.cssText = 'position:fixed;left:-9999px;opacity:0';
document.body.appendChild(textarea);
textarea.select();
const ok = document.execCommand('copy');
textarea.remove();
return ok;
}
document.querySelectorAll('[data-copy]').forEach((button) => {
button.addEventListener('click', async () => {
const code = button.closest('.snippet')?.querySelector('code')?.innerText ?? '';
const label = button.textContent;
button.textContent = (await copyToClipboard(code)) ? 'Скопировано!' : 'Ошибка';
setTimeout(() => { button.textContent = label; }, 1500);
});
});