2017-01-16 6 views
4

나는 Epub 독자하고 안드로이드 webview 안쪽에 책을 보여주는 중입니다.android webview에서 텍스트를 영구 강조 표시하는 방법은 무엇입니까?

는 현재 전 사용자가 하이라이트를 클릭 할 때 내가

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

이 강조 텍스트를하고 나는 또한 로컬 데이터베이스에서 강조 표시된 텍스트를 저장 자바 스크립트

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.findAllAsync(highlightedText); 

으로 (기본적으로 텍스트를 강조) 페이지를 입력하면 텍스트를 찾기 위해 노력하고 있지만, 강조 표시된 텍스트가 너무 작과 같은 단어는 ""인 경우 단어의 많은 것

강조 표시됩니다.

는 이미 SO에 검색하지만, 모든 질문에 답이 있었다 Question 1

그래서 이것을 달성하기 위해 다른 방법이 Question 2?

답변

0

기본적으로 강조하고 싶은 webview의 부분을 알아야합니다. 강조 표시된 텍스트를 보아서 알 수는 없습니다 (이전에 본 것처럼). 이를 수행하는 유일한 방법은 강조 표시 위치의 일부 버전을 저장하는 것입니다.

답변은 처음에 텍스트를 강조 표시 한 코드에 나와 있습니다. 레인지 객체에서

highlightRange(userSelection.getRangeAt(i));

정보를 저장. 그런 다음 페이지를로드 할 때이 정보를로드해야합니다. Highlightscript 기능과 동등한 작업을 수행했지만 저장 한 범위 정보로 수행하십시오. 응답

추가 세부 사항

조회 레인지 인터페이스 (https://developer.mozilla.org/en-US/docs/Web/API/Range)를 언급한다.

처음 범위를 강조 표시하면 시작 노드와 오프셋, 끝 노드 및 오프셋 정보를 추출 할 수 있습니다. 이것을 데이터베이스에 저장하십시오. (수행 방법은 사용중인 데이터베이스에 따라 다릅니다.)

페이지를 방문 할 때 적절한 정보를 검색하십시오. document.createRange() 또는 Range() 생성자를 사용하여 Range 개체를 만듭니다. 저장 한 시작 및 끝 정보를 입력하십시오.

구성한 Range 개체에 highlightRange()을 호출하십시오.

+0

현상금을 지불 할 가치가 없지만 여전히 낭비하고 싶지 않으므로 수여합니다. – Redman

+0

답변에서 누락 된 점이 무엇입니까? – Hod

+0

1. 내가 어떻게 위치를 저장합니까? 2. 어떤 종류의 위치를 ​​저장했다면, 그 위치/범위에서 어떻게 다시 강조 할 것인가? – Redman