2017-01-16 7 views
4

私はEpubの読者で、アンドロイドのwebviewの中で本を見せています。android webviewでテキストを永久にハイライト表示するにはどうすればよいですか?

は、現時点では私は、ユーザーがハイライトをクリックしたときに、私は

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

このハイライトテキストを行うと、私はまた、ローカルデータベースで強調表示されたテキストを保存するJavaScript

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 1Question 2

未回答でしたか?

答えて

0

基本的に、強調するウェブビューのどの部分を知る必要があります。ハイライトされたテキストを(あなたが見たように)保存するだけで、これを知ることはできません。それを行う唯一の方法は、ハイライトの場所のバージョンを保存することです。

あなたの回答は、最初にテキストを強調表示するために示したコードにあります。レンジオブジェクトから

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

関連する問題