javascript - epub阅读器ios中的文本突出显示和添加注释功能

标签 javascript ios epub

我正在开发适用于 ios 和 android 的 epub 阅读器。我想实现文本突出显示并向我的 epub 阅读器添加注释功能。我想知道如何将这些功能用于固定布局 epub。我可以通过javascript:window.getSelection()获取选定的对象。我想保存和检索这些对象以供将来使用。这是我用于突出显示和保存文本的代码:

var selection;
var storedSelections[];

function highlightText() {
if (window.getSelection) {
    selection = window.getSelection();
}
 if (selection.rangeCount > 0) {
    var range = selection.getRangeAt(0);
    var selectedText = range.toString();
    var span = document.createElement("span");
    span.id = "span_" + range.startOffset + "_" + range.endOffset ;
     alert(span.id);
    span.onclick = function() {
    myOnclikFunction(selectedText);};
span.setAttribute("class","uiWebviewHighlight");
    span.style.backgroundColor  = "skyblue";
    range.surroundContents(span);

    selection.removeAllRanges();
    selection.addRange(range);

    for (var i = 0; i < selection.rangeCount; i++) {
        storedSelections.push (selection.getRangeAt (i));
    }
    selection.removeAllRanges();
    localStorage.setItem('storedSelections',storedSelections);
}}

我使用此代码来检索突出显示的文本:

function ShowStoredSelections () {
storedSelections.length=0;
var retrieved= localStorage.getItem('storedSelections');
storedSelections.push (retrieved);
var selection = window.getSelection ();
for (var i = 0; i < storedSelections.length; i++) {
    selection.removeAllRanges ();
    selection.addRange (storedSelections[i]);
    if (selection.rangeCount > 0) {
        var range = selection.getRangeAt(0);
        var selectedText = range.toString();

        var span = document.createElement("span");
        span.id = "span_" + range.startOffset + "_" + range.endOffset ;
        span.onclick = function() {
            myOnclikFunction(selectedText);
        };
        span.setAttribute("class","uiWebviewHighlight");
        span.style.backgroundColor  = "red";
        range.surroundContents(span);
        selection.removeAllRanges();
        selection.addRange(range);
    }
}}

我无法将检索到的文本添加到 selection.addRange。我在这方面做错了什么?

请给我一些想法或建议来解决这个问题。

预先感谢您的任何回复或解答。

最佳答案

我已经为androd和iOS的 native epub播放器实现了所有这些-它是一个组织的产品研发

不要使用 getSelection,而是按照以下步骤操作。它很乏味,但功能将完全在您的控制之下

-> 将 url 提供给 UIWebView (iOS) 或 WebView (android)

-> 在 webview didload 的回调中 - 将所有文本单词包装到具有唯一 id 的 span 中

-> 将触摸事件传播到 webview - javascript 将使用 function onTouchMove(e)

处理这些触摸 -> 使用 document.elementFromPoint 获取跨度

-> 突出显示那些跨度(单词) -> 您将获得每个范围的位置 $('#wordID-'+sWordID).position(),您可以将这些值从javascript传递到 native 代码

-> 在webview的 super View 中添加便利贴 View

注意:最好在运行时将 jQuery 注入(inject)到 webview 中,以便将单词包装到 span 中

关于javascript - epub阅读器ios中的文本突出显示和添加注释功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15352852/

相关文章:

ios - 我遇到了一个奇怪的 SpriteKit AdMob 错误,有点令人困惑

ios - 如果同时添加 HockeyApp 和 MobileCenter pod,则无法构建应用程序

ios - 如何按小时对 HKStatistics 进行分组?

pandoc - 如何使用 pandoc 包含 epub 模板中的图像?

android - 寻找 Android 电子书编程的开源引用

javascript - 通过 R 和子进程在错误的目录中创建文件

javascript - 使用 Bootstrap 在移动平台其他桌面导航栏时显示汉堡菜单

javascript - Vue 从子组件向父组件暴露一个方法

ios - 如何在 ios 中为 AepubReader 添加日夜模式

javascript - ASP.net core MVC Framework 5 Formdata 附加图像时类型不正确