在epub(html)阅读器应用(android sdk,ios,web等)中序列化用户元素的最佳方式是什么

问题描述:

我们正在开发epub阅读器库。 我们的用户将能够在任何设备(网页浏览器,android sdk应用程序,ios应用程序等)上同步他们的阅读(通过服务器api)。 而且我们应该支持用户笔记,报价,阅读位置,书签的同步。我们也支持文​​本大小的改变。我们使用CSS列进行书页分页。在epub(html)阅读器应用(android sdk,ios,web等)中序列化用户元素的最佳方式是什么

现在为了序列化,我们尝试使用timdown/rangy库(TextRange模块):https://github.com/timdown/rangy/wiki/Text-Range-Module来确定相对于书本章节(html body)的文本位置。

但我们注意到:

  • JS功能,如selectCharacters(节点containerNode,数了startIndex,数endIndex的)的作品非常缓慢后
  • 文本的位置偏移文字大小改变

我们考虑使用相同的rangy函数,但相对于最近的dom元素(p)。但在这种情况下,我们必须每次在所有客户端的通用方式中识别dom元素。

什么是序列化的最佳方式 - 反序列化我们的情况下的用户元素?

当然,这是我们的工作,所以我们的问题,但我们将非常感谢您的任何建议!

唯一的“IDPF祝福”的方式来跟踪当前的阅读位置在于存储当前视口中第一个可见元素的EPUB CFI(请参阅http://www.idpf.org/epub/linking/cfi/epub-cfi.html)。

类似的高光,注释,书签。

请注意,如果您在将其传递给渲染器(比如WebView)之前操作原始EPUB资产的DOM(例如XHTML文件),那么您应该跟踪原始DOM和修改的DOM之间的映射,以便始终如一地应用CFI。

Readium JS项目有一个Javascript模块用于处理您可能会觉得有用的CFIs:https://github.com/readium/readium-cfi-js