Как заставить сафари поверить в то, что вызов clipboard api делается по нажатию на кнопку если в процессе выполняется асинхронный вызов?

Чтобы заставить Safari поверить, что вызов Clipboard API происходит по нажатию на кнопку в случае, когда выполняется асинхронный вызов, вам потребуется использовать обработчик события. Следующий код демонстрирует, как это можно сделать:

// Получаем ссылку на кнопку
const button = document.querySelector('button');

// Обработчик события нажатия на кнопку
const handleClick = async () => {
  try {
    // Предотвращаем выполнение действия по умолчанию (например, перезагрузку страницы)
    event.preventDefault();

    // Выполняем асинхронный вызов Clipboard API
    await navigator.clipboard.writeText('Текст, который будет скопирован');

    // Если асинхронный вызов успешно выполнен, выводим сообщение об успехе
    console.log('Текст успешно скопирован в буфер обмена');
  } catch (error) {
    // Если произошла ошибка при выполнении асинхронного вызова, выводим сообщение об ошибке
    console.error('Произошла ошибка при копировании текста', error);
  }
};

// Задаем обработчик события нажатия на кнопку
button.addEventListener('click', handleClick);

В данном примере, при нажатии на кнопку, происходит выполнение асинхронного вызова navigator.clipboard.writeText(), который копирует указанный текст в буфер обмена. Если вызов успешен, выводится сообщение об успехе. Если вызов завершается с ошибкой, выводится сообщение об ошибке.

Обратите внимание, что в случае с Safari, вы можете столкнуться с ошибкой доступа к буферу обмена поверх HTTPS, если ваш сайт не обеспечивает достаточную безопасность. Для решения этой проблемы, убедитесь, что ваш сайт работает по HTTPS и имеет достаточные разрешения доступа к буферу обмена.