2017-01-16 1 views
4

Я делаю читатель Epub и показываю книгу внутри веб-андроида.Как выделить текст на веб-обозревателе Android?

В настоящее время я могу выделить текст с помощью ниже яваскрипта

public static String Highlightscript = " <script language=\"javascript\">" + 

     "function highlightSelection(){" + 
     "var userSelection = window.getSelection();" + 
     "for(var i = 0; i < userSelection.rangeCount; i++)" 
     + " highlightRange(userSelection.getRangeAt(i));" + 
     "}" + 
     "function highlightRange(range){"+ 
     "span = document.createElement(\"span\");"+ 
     "span.appendChild(range.extractContents());"+ 
     "span.setAttribute(\"style\",\"display:block;background:#ffc570;\");"+ 
     "range.insertNode(span);}"+ 
     "</script> "; 

и когда пользователь нажимает на изюминкой я сделать

webView.loadUrl("javascript:highlightSelection()"); 

Этот Выделите текст и я также сохранить выделенный текст в локальной базе данных

, но когда пользователь снова открывает книгу, я хочу показать предыдущий выделенный текст. Как я могу достичь этого?

я пытаюсь найти текст, когда пользователь заходит на страницу (который подсвечивает текст по умолчанию) на

webView.findAllAsync(highlightedText); 

но если выделенный текст был слишком мал, как и слово «The», много слов будет выделено.

я уже искал на SO, но все вопросы были без ответа Question 1 и Question 2

Так есть ли другой способ для достижения этой цели?

ответ

0

Принципиально вы должны знать, какую часть веб-представления вы хотите выделить. Вы не можете это знать, просто сохранив выделенный текст (как вы видели). Единственный способ сделать это - связать сохранение некоторой версии местоположения выделения.

Ваш ответ указан в коде, который вы указали для выделения текста в первую очередь.

highlightRange(userSelection.getRangeAt(i));

Хранить информацию из объектов Range. Затем вам потребуется загрузить эту информацию при загрузке страниц. Сделайте эквивалент вашей функции Highlightscript, но с сохраненной информацией о диапазоне.

Добавление детали в ответ на комментарий

Lookup интерфейса Диапазон (https://developer.mozilla.org/en-US/docs/Web/API/Range).

Когда вы впервые выделите диапазон, вы можете извлечь начальный узел и смещение и завершение узла и информацию о смещении. Сохраните это в своей базе данных. (Как вы это делаете, зависит от того, какую базу данных вы используете.)

Получите соответствующую информацию, когда вы заходите на страницу. Создайте объекты Range с помощью document.createRange() или конструктора Range(). Заполните начальную и конечную информацию, которую вы сохранили.

Звоните highlightRange() на объекты Range, которые вы создали.

+0

Не стоит щедрости, но все равно присуждаю, потому что я не хочу тратить его – Redman

+0

Что вам не хватает в ответе? – Hod

+0

1. Как я могу сохранить местоположение 2. Даже если я сохранил какое-то местоположение, как я буду переходить в это место/диапазон – Redman

Смежные вопросы