Чтобы заставить 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 и имеет достаточные разрешения доступа к буферу обмена.