JavaScript

Копирование текста в буфер обмена

Algonexys · 07.08.2026 · 👁 0

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);
  });
});