Чтобы скопировать текст в буфер обмена в браузере Safari или любом другом браузере, вы можете использовать API буфера обмена (`Clipboard API`). Однако важно учесть, что браузеры позволяют использовать это API только в ответ на действия пользователя, например, в обработчиках событий, таких как `click`. Это сделано для обеспечения безопасности и предотвращения нежелательного копирования контента без разрешения пользователя.
Вот пример кода, который вы можете использовать для копирования текста в буфер обмена:
```javascript
document.querySelector('#myButton').addEventListener('click', async () => {
try {
const textToCopy = 'Текст для копирования';
await navigator.clipboard.writeText(textToCopy);
console.log('Текст скопирован в буфер обмена');
} catch (err) {
console.error('Ошибка при копировании текста: ', err);
}
});
```
В этом примере предполагается, что на вашей странице есть элемент с идентификатором `myButton`, который при нажатии копирует определенный текст в буфер обмена.
Если вы сталкиваетесь с ошибкой "The request is not allowed by the user agent or the platform in the current context, possibly because the user denied permission", это может означать, что у вас нет разрешения пользователя на выполняемое действие или действие не вызвано пользователем. Убедитесь, что код, который вызывает `navigator.clipboard.writeText`, вызывается в ответ на явное действие пользователя, например, по нажатию кнопки.
Также стоит уточнить, что некоторые браузеры, особенно на мобильных устройствах, могут ограничивать или не поддерживать работу с буфером обмена. Так что проверьте, поддерживается ли `Clipboard API` в текущем браузере:
```javascript
if (navigator.clipboard) {
// Clipboard API доступен
} else {
// Clipboard API не доступен
}
```
В случае CodePen и других подобных онлайн-редакторов может быть дополнительный слой ограничений безопасности, который ведет к такому поведению. Убедитесь, что вы тестируете свой код в изолированной вкладке или в локальной среде без дополнительных фреймов и iframes, которые могут налагать дополнительные политики безопасности.
Если ошибка сохраняется, убедитесь, что код исполняется на https-протоколе, так как некоторые API работают только в безопасном контексте.