让 javascript 知道何时在 epub3 电子书中播放媒体覆盖

Make javascript aware of when media overlays are being played in an epub3 ebook

我想要一些 javascript 代码来修改作为媒体覆盖(smil 驱动)的一部分播放的元素的某些属性。特别是,我对文本媒体覆盖感兴趣,它会在播放某些音频时突出显示。我的问题有两个:

EPUB 3 规范允许 JavaScript 嵌入 EPUB 容器的内容 "communicate" 仅通过 epubReadingSystem 对象与阅读应用程序一起使用。

不幸的是,该规范只要求公开基本字段,例如阅读系统的名称和版本,以及对其脚本功能的探测 (hasFeature)。参见:http://www.idpf.org/epub/301/spec/epub-contentdocs.html#app-epubReadingSystem

特别是,没有 IDPF 指定的方法来获取暴露于嵌入在 EPUB 中的 JS 的媒体叠加层的状态(不是 started/playing/pausing,哪个片段处于活动状态等)。

当然,理论上人们可能会找到一个针对特定阅读系统的 "hack"(特别是如果它的 GUI 依赖于 JS,如 Readium 或 iBooks),并且能够路由这些信息片段到 EPUB 中的 JS 代码(并由阅读系统呈现)。但是当然这种方法是脆弱的——正如你从我之前对我自己的观察中知道的那样 rb_smil_emulator.js.

另一种可能性是只监视 DOM,跟踪 类 中应用于 所有 SMIL 片段的变化,但这种技术可能在时间方面证明有问题 performance/accuracy.