Контролировать поведение выбора текста в iOS Mobile Safari и/или UIWebView?

У меня есть длинный HTML-документ, содержащий несколько абзацев. Когда я пытаюсь выбрать текст в Mobile Safari на iOS или в UIWebView, произойдет следующее:

  • Сначала я получаю точность на уровне персонажа по моему выбору. enter image description here
  • Затем, когда я выбираю больше, точность падает до двух строк текста и в конечном итоге до целых абзацев. Невозможно закончить мой выбор текста именно там, где я хочу. enter image description here

Когда я устанавливаю свойство CSS contentEditable в true, я сохраняю точность символьного уровня, но клавиатура также появляется, что, конечно, я не хочу.

Есть ли способ сохранить точность выбора уровня символа независимо от того, как долго текст я выбираю?

Ответ 1

iOS 8 WKWebView может решить эту проблему. WKWebViewConfiguration имеет свойство, называемое selectionGranularity. Комментарий гласит:

Уровень детализации, с которым пользователь может интерактивно выбирать контента в веб-представлении. Возможные значения описаны в WKSelectionGranularity. Значение по умолчанию WKSelectionGranularityDynamic.

Одно из двух возможных значений: WKSelectionGranularityCharacter. В комментарии говорится:

Конечные точки выбора могут быть размещены на любой границе символа.

Я еще не пробовал, но это звучит очень многообещающе!

Обновление 7/6/15. Похоже, это не так просто: Выбор текста в WKWebView: WKSelectionGranularityCharacter

Обновление 7/10/15. Когда вы внимательно изучаете приложение iOS Kindle, вы можете увидеть, что они повторно выполнили "собственный" выбор текста в JavaScript, потому что они не могли создать собственный текст выбор ведет себя так, как они хотели. Я почти уверен, что они, должно быть, пробовали все остальное, прежде чем они решили перепрофилировать его.

Ответ 2

Я встречаю ту же проблему,

Я решаю это по строке CSS:

display: inline-block;

Оба работают в Safari и WebView.

Ответ 3

Поскольку вы также выбираете заголовок текста, браузер распознает его как полный текст и выбирает весь абзац. Кстати, нет способа помочь вам, не увидев исходный код HTML!

Ответ 4

Эй, вы можете использовать свойство CSS, не позволяя пользователю выбирать текст. Вы можете использовать как:

html
{
   user-select:none;
}