我的电子书制作由setTimeout
. (我requestAnimationFrame
在可用时使用,它不在运行 iOS 5 的旧 iPad 上)。这本书由大约 100 个单独的 XHTML 文件组成,以确保分页符准确地出现在它们应该出现的位置,否则这在 iBooks 中是一个不确定的提议。
打开书后,动画非常慢(例如,每步一秒,而不是 50 毫秒),但在保持书打开一段时间(一分钟左右?)后,动画以预期的速度运行。
我发现的原因是:iBooks 显然是预先加载了书中的所有页面(我想是为了获取页码,或者加快翻页速度)。预加载似乎干扰了我的动画——setTimeout
实际上是在窃取插槽。
我曾认为问题可能是加载时在每个文档上设置动画所需的时间,但对这些时间进行了计时,发现每页只有几毫秒。问题可能是 100 多页中的每一页都有一个半大脚本 (100K),我想 iBooks 在预加载每一页时会一遍又一遍地解析它。
我已经考虑过在查看每个页面时动态包含大脚本的选项,但是一直在弄清楚如何判断是什么时候。我们在 Safari 中没有 PageVisibility API,并且该focus
事件不会在初始页面加载时触发,那么我如何判断页面何时实际被查看,而不是 iBooks 在后台悄悄预加载?
我的下一个尝试是将单个 XHTML 页面的数量减少到 1 个或几个,并利用我的机会page-break-*
处理分页。
我需要一种方法来 (1) 告诉 iBooks 要么不要预加载书中的其他页面,要么 (2)将我的setTimeout
请求优先于 iBooks 排队等待预加载页面的请求,或者 (3) 知道页面何时被加载显示,以便我可以在那个时间点注入脚本。
另请参阅epub 3,如何防止页面在后台运行?(iBooks / Readium)并在通过 Javascript 在 EPUB FXL 中查看页面时找出。