Скопировать значение переменной в буфер обмена в сафари - PullRequest
0 голосов
/ 05 ноября 2019

В моем проекте 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 (пока). Есть ли "родное" решение для моей проблемы?

...