Обнаружение изменения шрифта в EPUB

Я пытаюсь использовать или создать прослушиватель событий, когда пользователь меняет размер шрифта EPUB в электронной читалке с помощью Javascript, но я не нашел способа.

Что я пробовал без успеха:

  • Прослушиватель событий resize.
  • Событие синхронизации, которое измеряет размер шрифта.
  • Слушатель, который измеряет масштаб viewport.

В ebook-viewer (также известном как средство просмотра Calibre) я вижу в инспекторе, что каждый раз, когда я меняю размер шрифта, консоль печатает Viewport cfi: /2/4/2/2/1:1. Я вижу, что когда 1:1 изменяется, это какая-то шкала в целых числах.

Вот почему я попытался определить масштаб области просмотра с помощью этого или это.

Так что я полагаю, что это возможно только потому, что я вижу инспектора ebook-viewer...

Все попытки не работали и на iOS.

Обновить

Я знаю о epubReadingSystem и его ограничениях. Также этот JS является необязательным для EPUB3. Что я пытаюсь решить, так это то, что в испанской поэзии, когда стих больше размера коробки, он должен быть разрывом, а следующая строка должна быть выровнена по правому краю со скобкой:

A short verse. A very very long [verse.

Я понял, как сделать это изменение. Проблема в том, что когда пользователь меняет шрифт, расчет приходится выполнять заново. Я попытался решить эту проблему, сделав фиксированный EPUB, но iBooks и ebook-viewer позволяют увеличить шрифт...

Рабочий пример: jsfiddle.net/dxr9azy7.


person NikaZhenya    schedule 29.03.2017    source источник


Ответы (2)


Не существует надежного способа делать то, что вы хотите, где «надежный» означает «работа на любой возможной системе чтения EPUB». Причина в том, что спецификация EPUB не предоставляет документу официального способа «узнать» свойства контекста — например, текущие настройки чтения, такие как размер шрифта — приложения, отображающего его.

Обратите внимание, что поддержка Javascript отсутствует в EPUB 2, а только необязательна в EPUB 3, и многие системы чтения ограничивают тип кода Javascript, который вы можете иметь внутри своего EPUB.

Спецификация EPUB 3 представила объект epubReadingSystem для тех систем чтения, которые поддерживают Javascript, но не требует, чтобы он предоставлял, например. привязки событий, которые могут использоваться кодом JS внутри EPUB для реагирования на изменения, например. в настройках чтения. (См.: http://www.idpf.org/epub/31/spec/epub-contentdocs.html#app-epubReadingSystem )

С другой стороны, поскольку большинство систем чтения действительно построены поверх механизмов рендеринга, таких как WebKit, если они позволяют вам запускать Javascript, вы действительно можете выполнить некоторый «обратный инжиниринг» и попытаться найти правильные глобальные объекты, которые они поддерживают, и документ. модель, которую они используют для отображения. Если повезет, вы сможете зарегистрировать свои собственные привязки. Однако это решение потребует много времени, чтобы понять его, оно будет работать только на данных системах чтения, которые вы тестировали, и может сломаться при обновлении приложения. Короче говоря, я не рекомендую пробовать этот маршрут.

РЕДАКТИРОВАТЬ: Кстати, то, что вы спрашиваете, похоже на то, что я реализовал в своем собственном приложении для чтения EPUB 3: https://www.readbeyond.it/minstrel/developers.html#js но, к сожалению, это единственное известное мне приложение, в котором реализован механизм установления канала связи между JS внутри EPUB. файл и система чтения.

person Alberto Pettarin    schedule 29.03.2017
comment
Я обновил сообщение, чтобы объяснить, чего я хочу достичь, это onFontSizeChange, который вы реализуете. Итак, нет известного решения этого? Как в Minstrel обнаружить это изменение? - person NikaZhenya; 29.03.2017
comment
Для того, чего вы хотите достичь, лучше всего использовать CSS вместо JS. Вы можете прочитать epubsecrets.com/formatting-poetry-in-epub -part-1.php и epubsecrets.com/formatting -poetry-in-epub-part-2.php : эти статьи старые, но вы можете почерпнуть из них хорошие идеи о том, как форматировать свои стихи. - person Alberto Pettarin; 30.03.2017
comment
Minstrel — это гибридное приложение, поэтому графический интерфейс на самом деле представляет собой HTML5 + JS, работающий внутри WebView в собственном приложении, созданном Cordova. Таким образом, когда он открывает EPUB, он просто предоставляет глобальный объект epubReadingSystem, а когда событие происходит через графический интерфейс приложения (например, пользователь увеличивает шрифт => событие размера шрифта), если есть обратные вызовы, зарегистрированные кодом JS внутри EPUB на этот глобальный объект, они называются. См. github.com /readbeyond/minstrel/blob/master/cordova/src_minstrel/ и следующие строки. На странице developer.html есть пример EPUB. - person Alberto Pettarin; 30.03.2017
comment
Я знаю о тех ссылках, которые вы присылаете. На английском языке формат называется «párrafo francés», и его легко получить с помощью CSS. Но на испанском это невозможно сделать с помощью CSS. Нет автоселектора для вставки контента после каждого авторазрыва. Даже в JS нет способа определить, когда и где прерывается абзац. По крайней мере, как я обнаружил, потому что я работал над этой проблемой несколько месяцев назад, и когда, наконец, я нашел способ добиться этого, я увидел проблему, размещенную здесь. - person NikaZhenya; 31.03.2017

Благодаря этой публикации мы нашли способ обнаружить изменение размера шрифта в EPUB, по крайней мере, в Calibre, ADE и iBooks для Mac и iOS. Неплохо бы попробовать в Readium и EPUBReader...

Вы должны создать iframe:

window.addEventListener("load", function () {
    iframe = document.createElement("iframe");
    iframe.id = "some_id";
    iframe.style.top = "0";
    iframe.style.left = "0";
    iframe.style.width = "100%";
    iframe.style.height = "5em";
    iframe.style.zIndex = "-1";
    iframe.style.visibility = "hidden";

    document.body.insertBefore(iframe, document.body.childNodes[0]);

    window.frames["some_id"].addEventListener("resize", function () {
        // Event when font size changes.
    });
});

Если вы ищете рабочий скрипт для испанской поэзии, см. . Скачать образец: mobileread.com/forums/attachment.php?attachmentid=155891&d=1490939383.

Спасибо!

person NikaZhenya    schedule 31.03.2017