如何在纯 HTML5/CSS/Jquery 中显示 epub 格式的书籍

2024-01-30

是否可以使用纯 HTML5、CSS 和 Jquery 在网络浏览器中显示 epub 格式的书籍?有人可以建议我该怎么做吗?我还必须使其响应式才能使其在 iPad 上运行。我知道这一点,但我不知道如何使用 HTML 和 Javascript 阅读 epub。

epub 可能包含一些数学函数,我也需要正确显示它们。


是否可以使用纯 HTML5、CSS 和 jQuery 在 Web 浏览器中显示 epub 格式的书籍?

对的,这是可能的。

为什么要写一个 epub 阅读器?那里已经有很多了。

无论如何,您的问题是通用问题的特定形式,是否可以为 epub 编写一个电子书阅读器?显然,是的,可能已经写好了。如果您可以用一种语言或为一种平台编写它,那么您也可以用另一种语言或为另一种平台编写它。

但实际上,您甚至不需要编写阅读器,因为 epub 只是罐装的小网站。将 epub 文件解压缩到服务器上的某个位置,然后将浏览器导航到其中一个页面。瞧,你正在读书。您想要目录吗?导航到 toc.xhtml 或等效文件即可。

从一页移动到下一页怎么样?您需要知道页面应该以什么顺序显示。编写一个小型服务器组件,该组件解析通常称为 content.opf 的文件,并根据清单元素中文件的顺序发出一些 HTML,其中包含前进和后退按钮以及用于显示内容的 iframe。当你在做的时候,解析出标题和其他有趣的元数据。所有这些本质上都是 epubjs 所做的。

但从你的问题中我直觉知道你想完全在客户端/浏览器端执行此操作。好吧,这也已经以 Readium 的形式完成了,您应该看看。使用您最喜欢的 JS 解压缩库(警告,可能会很慢)来解压缩 epub 文件,并编写一些 JS 来解析元数据并抛出页面,同样最有可能在带有一些镶边的 iframe 中。

但是,如果您想要分页输出(人们对电子书阅读器的期望如此),该怎么办?这就是事情开始变得棘手的地方,并且可能是一个退后一步并再次问自己为什么要这样做的好地方。无论如何,如果您决定确实想要分页显示,那么您将需要找出涉及窗口、框架、剪辑、偏移和/或使用“区域”的逻辑组合来帮助您。一些电子书读者只是在这里下注,并说,滚动/未分页的输出到底有什么问题?

但电子书阅读器还可以做很多其他事情。例如,大多数都允许您更改行距、边距或字体大小。这些用户设置如何与书籍 CSS 文件中的样式交互?一些读者采用解析 CSS 的方法(也有相应的库)并重写它以获得您或您的用户想要的结果。

更喜欢应用程序而不是浏览器应用程序?将整个 shebang 包裹在 PhoneGap 中。

要成为一名合格的读者,你将不得不担心很多很多其他事情。就在我的脑海中,这包括显示某些书籍指定的“指南”或“地标”,记住阅读位置和会话之间的用户选项,并且可能提供某种书架功能。

尽管一些客户端电子书阅读器确实使用 jQuery,但请记住,由于 epub 是 HTML5/CSS2.5/JS,因此内容本身只能由现代浏览器可靠地显示。但如果你有一个现代的浏览器,你就不需要 jQuery 中 90% 的毛发了,它是为跨浏览器兼容性而设计的。您最好使用更轻量级的组件,例如 Backbone 和/或 Underscore。您可能甚至不需要选择器库,因为您将拥有 querySelector。

祝你好运!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在纯 HTML5/CSS/Jquery 中显示 epub 格式的书籍 的相关文章

随机推荐

  • 区分 Jersey、Jackson 和 JaxB API

    嗨 我一直在内部使用 Jackson 进行 JSON 处理 我想将这些对象作为 Json 提供给外部 API REST 现在 它们在内部存储为 java 对象 明显的实现是编写某种查询引擎来读取请求 从底层数据存储中检索对象 然后使用 Ja
  • 从 Mercurial 中的单个本地存储库推送到多个远程存储库

    我正在考虑使用 AppHarbor 托管一个轻量级网站 并正在研究他们的 Mercurial 集成 目前我使用 Kiln 作为远程存储库 但目前 AppHarbor 仅支持 BitBucket 集成 一个本地存储库可以有 2 个远程存储库吗
  • ES6 类变量替代方案

    目前 在 ES5 中 我们许多人在框架中使用以下模式来创建类和类变量 这很舒服 ES 5 FrameWork Class variable string variable2 true init function addItem functi
  • 如何删除 Firefox 按钮和链接上的虚线轮廓?

    我可以让 Firefox 不显示丑陋的虚线焦点轮廓links有了这个 a focus outline none 但我怎样才能做到这一点
  • 为什么设置 USER 环境变量需要 12 秒?

    使用以下代码 我经历了可怕的运行时 Option Explicit Dim ShellEnvironment Set ShellEnvironment CreateObject WScript Shell Environment USER
  • UIPopoverController:为什么我的弹出窗口没有出现在我想要的地方?

    简单的 一个视图 我使用presentPopoverFromRect在CGRect中呈现一个UIPopoverController 并且箭头或弹出框都没有出现在我传入的矩形中要求的坐标附近 有什么线索吗 我一直试图自己解决这个问题 但我放弃
  • 从 Java 中的其他类访问私有变量

    如果我想创建一个将人员添加到列表中的表单 我如何从另一个类访问该列表 我应该在哪里定义该列表 以便其他类可以访问成员 大小等 例如 如果我有 Foo 类 它具有适用于我的表单的 GUI 以及用于向列表中添加和删除人员的按钮 那么将列表声明为
  • crosstable() 导出到 csv

    你好 所以我需要制作一个交叉表 我发现有多种方法 但有一个函数可以使表格就像 Excel 中的数据透视表一样 它工作完美 但我无法将其导出到 csv 或 excel 因为它是 Crosstable 类 因此不能强制它 我如何设法将其导出为
  • Spark 按列字数统计

    我们正在尝试在 Spark 中生成数据集的按列统计数据 除了使用统计库中的汇总功能之外 我们正在使用以下程序 我们确定具有字符串值的列 生成整个数据集的键值对 使用列号作为键 列的值作为值 生成新的格式映射 K V gt K V 1 然后我
  • 在 Xcode 9 中运行自定义 shell 脚本“[cp] embed pods Frameworks”

    我刚刚将 cocoapods 更新到最新版本 当前版本是1 3 1 之后 我无法存档该项目 每当我尝试存档该项目时 都会收到以下错误 因此我附上了屏幕截图 你可以去Build Phases然后到 CP Embed Pods Framewor
  • 删除管理对象后核心数据故障

    基本上 我试图在从 a 中删除 a 后访问 a 的一些属性NSManagedObjectContext并保存上下文 问题是 保存上下文后 Core Data 将对象数据标记为错误 并且显然无法恢复它 我创建了一个示例项目来重现该问题 您可以
  • 为什么ApplicationsDocumentsDirectory 对于单元测试返回 null?

    我正在使用 flutter path provider 插件 我需要一个 SQLite 操作 我的错误测试类找不到 getApplicationDocumentsDirectory 并返回 null 该应用程序在模拟器 真实设备上运行 任何
  • PHP XAMPP 服务器 DOCUMENT_ROOT 文件夹结构

    这是我第一次使用 xampp 创建测试站点 我最初将所有 php 文件放在一个文件夹中 最近决定组织数据 是的 事后看来 我应该从一个有组织的文件夹结构开始 无论如何 我的设置如下 表示它是一个文件夹 安装在我的 C 驱动器上 xampp
  • 在 iTextSharp 中将 pdfimportedpage 居中

    我通过 iTextSharp 使用下面的函数将 PDF 附加在一起 它工作正常 唯一的问题是 大于文档设定尺寸 A4 的 PDF 最终会被缩放并放置在文档的左下角 我想将其居中 谁能指出我实现这一目标的正确方向 干杯 private voi
  • WPF。对于多重触发条件,“属性”必须具有非空值

    具有多重触发 其中一个条件不为空 因此如果 StowedAssetDetailedThumbnailViewModel null 则设置模板
  • 更改 Win32 Windows 项目中的默认窗口字体

    我正在使用 C 和 Win32 api 创建 GUI 应用程序 我想知道如何将主窗口的默认字体更改为 thaoma 我有 NET 背景 在 NET中 如果我们更改父控件的字体 那么子控件会自动继承该字体 有没有类似的或者我们需要手动设置每个
  • 性能问题:“java.text.MessageFormat.format”与“StringBuilder”

    我想知道比较MessageFormat or StringBuilder班级 举个例子 我有一个字符串 就性能而言 哪一个更快 java text MessageFormat format or StringBuilder Test app
  • 如何获取 Google Plus 通知数量?

    我正在开发一个 Google Chrome 扩展程序 我想在后台运行的脚本中检索当前用户的 Google 通知计数 是否可以 我在以下位置研究了 Google API https developers google com api http
  • 使用 $.cookie() 的 cookie 保存多个面板的折叠状态

    我正在尝试确定如何使用 cookie 保存可折叠面板的折叠状态 This https stackoverflow com questions 12733238 retain twitter bootstrap collapse state
  • 如何在纯 HTML5/CSS/Jquery 中显示 epub 格式的书籍

    是否可以使用纯 HTML5 CSS 和 Jquery 在网络浏览器中显示 epub 格式的书籍 有人可以建议我该怎么做吗 我还必须使其响应式才能使其在 iPad 上运行 我知道这一点 但我不知道如何使用 HTML 和 Javascript