AndroidおよびiOS用のネイティブepubプレーヤーの開発に関する私の経験に基づいて、この回答を提供しています。
私はこのようにしてそれを達成しました。
これは私がテキストの強調表示を行った方法です
-onloadコールバックでURLがwebviewに読み込まれたら、このようにjquery libをwebview domに注入します
プライベートボイド addJQueryJS()
{
文字列パス = "file:///android_asset/JSLibraries/jquery.min.js";
String data = "{\"MethodName\":\"onJQueryJSLoaded\",\"MethodArguments\":{}}";
文字列 callBackToNative = " jsInterface.callNativeMethod('jstoobjc:"+data+"');";
文字列スクリプト = "関数 includeJSFile()"
+"{"
+"関数 loadScript(url, コールバック)"
+"{"
+"var script = document.createElement('script');"
+"script.type = 'text/javascript';"
+"script.onload = 関数 () {"
+"コールバック();"
+"};"
+"script.src = url;"
+"if(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0])"
+"{"
+"(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(script);"
+"}"
+"else { コールバック(); }"
+"}"
+"loadScript('"+パス+"', 関数 ()"
+"{"
+callBackToNative
+"});"
+"} ; includeJSFile();";
loadUrl("javascript: "+script);
}
各単語を一意の ID を持つスパンにラップします
次にjsファイルを作成し、jqueryと同じように注入し、そこにタッチメソッドを書き込みます
関数 onTouchMove(e)
{
e.preventDefault();
if(((touchendStartStick == true || touchendEndStick == true) && currHVO != 未定義)
{
var touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
var obj = document.elementFromPoint(touch.pageX-window.pageXOffset,touch.pageY-window.pageYOffset);
if($(obj).is('span'))
{
$(obj).css('背景色','rgba(0,0,255,0.3)');
}
}
};
単語の x、y 幅、高さの値も取得できるため、ネイティブ ビューでドラッグ可能なピンの開始、終了を表示できます。
ハイライトの最初と最後の単語 ID を db または永続的なストレージに保存することで、ハイライトを保存できます。次にユーザーが本を開いたときに、それらの単語 ID を取得し、それらのスパンを強調表示します。