Суть проблемы: при нажатии на кнопку на сайте должно происходить копирование какой-либо информации, которая располагается где-либо на сайте, в моем случае в data-attr. Копирование везде, кроме IOS можно легко сделать при помощи execCommand('copy'). То есть мы создаем какой-то скрытый input или textarea, в ней выполняем select(), а дальше execCommand('copy'). C IOS все неочевидно. Stackoverflow предлагает решение через userAgent
const iosFlag = !!navigator.userAgent.match(/ipad|ipod|iphone/i);
copyClipBoard() {
if (iosFlag) {
const oldContentEditable = this.textArea.contentEditable;
const oldReadOnly = this.textArea.readOnly;
const range = document.createRange();
this.textArea.contenteditable = true;
this.textArea.readonly = false;
range.selectNodeContents(this.textArea);
const s = window.getSelection();
s.removeAllRanges();
s.addRange(range);
this.textArea.setSelectionRange(0, 999999);
this.textArea.contentEditable = oldContentEditable;
this.textArea.readOnly = oldReadOnly;
document.execCommand('copy');
}
}
Решение рабочее, но проблема состоит в том, что на IOS происходит скролл страницы до того места, где создан инпут. ТО есть если я делаю document.body.appendChild(myTetxtArea), то он скроллит прямо к этому элементу. Можно решить проблему создавая textarea прям под кнопкой копирования. Тогда скролл минимален (но он есть), при этом на доли секунды появляется клавиатура девайса и пропадает.
И, собственно, я не знаю, как решить проблему появления клавиатуры и микроскролла? Есть ли какие-то еще решения, чтобы копировать по кнопке, при этом на IOS было также визуально, как и везде?
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости