2016-04-05 3 views
0

Мы разрабатываем библиотеку чтения epub. Наши пользователи смогут синхронизировать их чтение (через сервер api) на любых устройствах (веб-браузер, приложение sdk для Android, приложение iOS и т. Д.). И мы должны поддерживать синхронизацию пользовательских заметок, цитат, позиций чтения, закладок. Мы также поддерживаем изменение размера текста. И мы используем столбцы css для разбивки книг.Каков наилучший способ сериализации пользовательских элементов в приложениях для чтения epub (html) (android sdk, ios, web и т. Д.)

Теперь для сериализации мы пытаемся использовать библиотеку timdown/rangy (модуль TextRange): https://github.com/timdown/rangy/wiki/Text-Range-Module для определения текстовых позиций относительно главы книги (html body).

Но отметим:

  • JS функции, такие как selectCharacters (Node containerNode, номер STARTINDEX, номер ENDINDEX) работает очень медленно
  • текста позиции несоответствие после размера текста меняющегося

Мы думая об использовании одних и тех же функций rangy, но относительно ближайшего элемента dom (p). Но в этом случае нам придется каждый раз идентифицировать элементы dom в каком-то универсальном для всех клиента пути.

Каков наилучший способ сериализации - десериализация пользовательских элементов в нашем случае?

Конечно, это наша работа и наши проблемы, но мы будем очень благодарны за ваш совет!

ответ

0

Один и только «IDPF-благословенный» способ отслеживания текущего положения считывания состоит в хранении EPUB CFI (см. http://www.idpf.org/epub/linking/cfi/epub-cfi.html) первого видимого элемента в текущем окне просмотра.

Аналогично для бликов, аннотаций, закладок.

Обратите внимание, что если вы манипулируете DOM оригинального актива EPUB (скажем, файла XHTML), прежде чем передавать его в ваш рендерер (скажем, WebView), вам следует отслеживать карту между оригиналом и измененным DOM , чтобы последовательно применять CFI.

Проект Readium JS имеет модуль Javascript для работы с CFI, который может оказаться полезным: https://github.com/readium/readium-cfi-js

 Смежные вопросы

  • Нет связанных вопросов^_^