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

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

本文关键字:何时 播放 媒体 覆盖 电子书 javascript 知道 epub3      更新时间:2023-09-26

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

  • 有没有办法查明媒体覆盖是否"活跃"?一些回调功能将是最好的,否则我可以创建一个计时器并不断从js检查状态
  • 一旦我知道(如果可能的话)有一个元素被高亮显示,有没有办法知道这个是哪个SMIL ID

EPUB 3规范允许嵌入EPUB容器中的JavaScript内容仅通过epubReadingSystem对象与读取应用程序"通信"。

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

特别是,没有IDPF指定的方法来获取暴露于嵌入EPUB内的JS的媒体覆盖层的状态(未启动/播放/暂停,哪个片段是活动的,等等)。

当然,理论上,人们可能会为特定的阅读系统找到"破解"方法(尤其是如果它依赖JS作为GUI,如Readium或iBooks),并能够将这些信息路由到EPUB内的JS代码(并由阅读系统呈现)。当然,这种方法是脆弱的——正如你从我之前对我自己的rb_smil_emulator.js的观察中所知道的。

另一种可能性是只监视DOM,跟踪应用于所有SMIL片段的类的变化,但这种技术可能在定时性能/准确性方面存在问题。