2017-01-16 105 views
4

我正在做Epub閱讀器,並顯示在android webview中的書。如何在android webview上永久突出顯示文本?

目前我可以使用下面的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.loadUrl("javascript:highlightSelection()"); 

這突出顯示文本,我也保存在本地數據庫中突出顯示的文本

但是當用戶重新打開這本書時,我想顯示以前突出顯示的文本。我怎樣才能做到這一點?

我試圖當用戶通過

webView.findAllAsync(highlightedText); 

進入頁面(默認情況下凸顯文本)查找的文字,但如果高亮文本太小像單詞「the」,很多話會強調。

我已經搜查左右,但所有的問題都沒有答案Question 1Question 2

那麼,有沒有任何其他的方式來實現這一目標?

回答

0

基本上你必須知道你想突出顯示哪個部分的webview。您只需儲存突出顯示的文字即可知道這一點(如您所見)。要做到這一點的唯一方法就是存儲某個版本的高亮位置。

您的答案在您爲了突出顯示文本而展示的代碼中。從Range對象

highlightRange(userSelection.getRangeAt(i));

存儲信息。加載頁面時,您需要加載這些信息。做相當於您的Highlightscript功能,但與您保存的範圍信息。響應

添加詳細評論

查找的範圍接口(https://developer.mozilla.org/en-US/docs/Web/API/Range)。

當您第一次突出顯示範圍時,可以提取開始節點和偏移量,並結束節點和偏移量信息。將其存儲在數據庫中。 (你如何做,取決於你正在使用的數據庫。)

當您訪問該頁面時檢索相應的信息。使用document.createRange()Range()構造函數創建範圍對象。填寫您保存的開始和結束信息。對您構建的Range對象調用highlightRange()

+0

不值得賞金,但仍然獎勵,因爲我不想浪費它 – Redman

+0

你覺得從答案中缺少什麼? – Hod

+0

1.如何保存位置 2.即使我保存了某種位置,如何重新放置該位置/範圍 – Redman

相關問題