В моем проекте vue у меня есть кнопка копирования, которая должна копировать значение атрибута из данных при клике:
<span class="btn-action" :class="!data.value.copy ? 'btn-disabled' : 'btn-active'" @click="copyCode(data.item)"><font-awesome-icon :icon="['far', 'copy']" /></span>
и моя функция copyCode:
copyCode: function(item) {
// tests if item exists...
let copyText = item.code;
if (navigator && navigator.clipboard) {
console.log('navigator:', navigator);
// this works on chrome/firefox
navigator.clipboard.writeText(copyText);
} else {
console.log('no navigator');
this.writeTextIOS(copyText);
}
}
writeTextIOS: function(str) {
return new Promise(function(resolve, reject) {
let success = false;
function listener(e) {
e.clipboardData.setData("text/plain", str);
e.preventDefault();
success = true;
}
document.addEventListener("copy", listener);
document.execCommand("copy");
document.removeEventListener("copy", listener);
success ? resolve() : reject();
});
},
Я нашелв safari есть навигатор, но у него нет свойства буфера обмена (я мог бы также проверить navigator.userAgent
, но это не проблема, поскольку он определенно входит в оператор else, когда я использую safari). Я получил функцию writeTextIOS отсюда: https://gist.github.com/lgarron/d1dee380f4ed9d825ca7 Но я получаю только исключение Unhandled Promise Rejectio: undefined
.
Так что мне здесь делать. Я не хочу использовать какой-либо сторонний пакет, такой как clipboard.js (пока). Есть ли "родное" решение для моей проблемы?