Эта фича называется Live Text, а по сути, это оптическое распознавание символов, OCR, optical character recognition. К сожалению, у неё пока нет АПИ, чтобы подсказать правильный текст или запретить его выделение.

В простых случаях, например, для изображений, замещающих заголовки, можно «подхачить» процедуру копирования текста. Если клиент выделяет и копирует текст с такого изображения, будем помещать в буфер обмена правильный текст. Покажу на примере.

Соберём заголовок с заменой текста на изображение:

<h1 class="textHide">
  Визуализация данных
  <img src="header-title.png">
</h1>
.textHide {
  font: 0/0 a !important;
  text-shadow: none !important;
}
Визуализация данных
При выделении и копировании текста в Сафари получаем что угодно от «ДАННЫТ» до «ВиЗ ЛИЗАПИЯ ДАННЫХ»

Добавим обработчик события копирования к изображению:

// Находим все элементы, заменяемые изображениями
Array.from(document.querySelectorAll('.textHide')).forEach(el => {
  // Получаем текст заголовка
  const properText = el.textContent
  // Обрабатываем событие копирования
  el.addEventListener('copy', (e) => {
    e.preventDefault()
    // Переписываем буфер обмена, вставляя в него правильный текст из заголовка
    e.clipboardData.setData('text/plain', properText)
  })
})

Визуализация данных

Теперь, если выделить и скопировать текст с изображения, в буфер обмена попадёт «Визуализация данных»

Осторожно, у этого хака есть проблемы. Скажем, в контекстом меню по‑прежнему будет что угодно:

Сафари обнаружил третий вариант текста на изображении — «ВИЗУА" МИЗАЦИЯ ДАННЫХ»

P. S. Это был совет о веб‑разработке. Хотите знать всё о коде, тестах, фронтенд‑разработке, цеэсэсе, яваскрипте, рельсах и джейде? Присылайте вопросы.

Веб‑разработка
Отправить
Поделиться
Запинить

Рекомендуем другие советы