当用户使用Javascript在电子书阅读器中更改EPUB的字体大小时,我正在尝试使用或创建事件监听器,但我找不到方法。
我尝试过但没有成功:
SELECT ...
FROM LoanContract lc
WHERE lc.LoanTypeID = 1
AND lc.EmployeeID = emp.EmployeeID
事件监听器。resize
。在viewport
(又名Calibre查看器)中,我可以在检查器中看到,每次更改字体大小时,控制台都会打印ebook-viewer
。我看到当Viewport cfi: /2/4/2/2/1:1
发生变化时,这是int数字中的某种比例。
所以我认为这是可能的,因为我可以通过1:1
的检查员看到......
所有尝试都无法在iOS上运行。
更新
我知道ebook-viewer
及其局限性。此外,JS是EPUB3的可选项。我想要解决的是,在西班牙诗歌中,当一个诗歌大于盒子的大小时,它必须是一个休息,下一行必须与支架正确对齐:
epubReadingSystem
我想出了如何做出这种改变。问题是当用户更改字体时,必须再次进行计算。我尝试通过修复EPUB来解决这个问题,但iBooks和
A short verse.
A very very long
[verse.
允许字体增加......
一个工作示例:jsfiddle.net/dxr9azy7
答案 0 :(得分:0)
没有可靠的方法来做你想要的,可靠的"意味着"致力于任何可能的EPUB阅读系统"。原因是EPUB规范没有提供文件的官方方式,以便知道"上下文的属性---例如,呈现它的应用程序的当前读取设置,如字体大小。
请注意,EPUB 2中不存在Javascript支持,EPUB 3中只提供Javascript支持,许多阅读系统会限制您在EPUB中可以使用的Javascript代码类型。
EPUB 3规范为那些支持Javascript的阅读系统引入了epubReadingSystem
对象,但它并不要求它提供例如可以由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但不幸的是它是唯一一个实现建立通信机制的应用程序(我知道) EPUB文件中的JS与阅读系统之间的通道。答案 1 :(得分:0)
感谢this post我们找到了一种方法来检测EPUB中的字体大小更改,至少在Calibre,ADE和iBooks for 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.
});
});
如果您正在寻找西班牙诗歌的工作脚本,see this。下载示例:mobileread.com/forums/attachment.php?attachmentid=155891&d=1490939383
。
谢谢!