0

当用户使用 Javascript 在电子阅读器中更改 EPUB 的字体大小但我没有找到方法时,我正在尝试使用或创建事件侦听器。

我没有成功的尝试:

  • resize事件监听器。
  • 测量字体大小的计时事件。
  • 测量viewport.

ebook-viewer(又名 Calibre 查看器)中,我可以在检查器中看到每次更改控制台打印的字体大小时Viewport cfi: /2/4/2/2/1:1。我看到当1:1发生变化时,它是 int 数字的某种比例。

这就是为什么我尝试使用thisthis检测视口比例的原因。

所以我想这可能只是因为我可以通过检查员看到ebook-viewer......

所有的尝试都没有在 iOS 上运行。

更新

我知道epubReadingSystem它及其局限性。此外,对于 EPUB3,JS 是可选的。我要解决的是,在西班牙诗歌中,当诗句大于盒子的大小时,它必须是一个中断,并且下一行必须与括号右对齐:

A short verse. A very very long [verse.

我想出了如何进行此更改。问题是当用户更改字体时,必须再次进行计算。我试图通过做一个固定的 EPUB 来解决这个问题,但是 iBooks 并ebook-viewer允许字体增加......

一个工作示例:jsfiddle.net/dxr9azy7

4

2 回答 2

0

感谢这篇文章,我们找到了一种检测 EPUB 中字体大小变化的方法,至少在 Mac 和 iOS 的 Calibre、ADE 和 iBooks 中是这样。最好在 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.

谢谢!

于 2017-03-31T05:47:47.897 回答
0

没有可靠的方式来做你想做的事,其中“可靠”意味着“在任何可能的 EPUB 阅读系统上工作”。原因是 EPUB 规范没有提供官方方法让文档“了解”上下文的属性——例如,当前阅读设置,如字体大小——呈现它的应用程序。

请注意,Javascript 支持在 EPUB 2 中不存在,在 EPUB 3 中只是可选的,并且许多阅读系统限制了您可以在 EPUB 中拥有的 Javascript 代码的类型。

EPUB 3 规范epubReadingSystem为那些支持 Javascript 的阅读系统引入了一个对象,但它不要求它应该提供例如事件绑定,以便 EPUB 内的 JS 代码可以使用这些事件绑定来响应阅读设置等变化。(见:http ://www.idpf.org/epub/31/spec/epub-contentdocs.html#app-epubReadingSystem )

另一方面,由于大多数阅读系统确实是建立在 WebKit 等渲染引擎之上的,如果它们允许您运行 Javascript,您确实可以进行一些“逆向工程”并尝试找出它们维护的正确全局对象和文档他们用于展示的模型。运气好的话,您也许可以注册自己的绑定。但是,此解决方案需要大量时间才能弄清楚,它仅适用于您测试的给定阅读系统,并且可能会随着应用程序更新而中断。简而言之,我不建议尝试这条路线。

编辑:顺便说一句,您所问的类似于我在自己的 EPUB 3 阅读应用程序中实现的内容:https ://www.readbeyond.it/minstrel/developers.html#js但不幸的是它是唯一的应用程序(我知道of) 实现了一种机制,建立了 EPUB 文件内部的 JS 和阅读系统之间的通信通道。

于 2017-03-29T11:58:37.417 回答