如何在 epub xhtml 中加载 javascript 模块
Posted
技术标签:
【中文标题】如何在 epub xhtml 中加载 javascript 模块【英文标题】:How to load javascript module in epub xhtml 【发布时间】:2021-09-09 21:10:55 【问题描述】:我有一本电子书 (ebook1.epub),它可以像这样加载一个 javascript 文件 (script1.js):
cat EPUB/xhtml/raw/ch1.xhtml
<!--?xml version='1.0' encoding='UTF-8'?-->
<!DOCTYPE html><html xml:lang="en-us" lang="en-us" xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xmlns:xlink="http://www.w3.org/1999/xlink">
<head>
<script type="text/javascript" src="../../js/script1.js"></script>
...
</head>
...
</html>
# --------------------------------------------------------------
cat EPUB/package.opf
...
<item id="js4" href="js/script1.js" media-type="text/javascript"/>
这工作正常。我通过以下方式查看这本书:
calibre ebook1.epub
script1 按预期工作,(例如,从 script1 中调用 console.log("foo1") 会按预期响应并打印到启动 calibre 的终端)。
现在,我需要使用 Javascript 模块文件 (ES6) (script2.js) javascript 模块文件是这样加载的:
cat EPUB/xhtml/raw/ch1.xhtml
<!--?xml version='1.0' encoding='UTF-8'?-->
<!DOCTYPE html><html xml:lang="en-us" lang="en-us" xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xmlns:xlink="http://www.w3.org/1999/xlink">
<head>
<script type="module" src="../../js/script2.js"></script>
...
</head>
...
</html>
# --------------------------------------------------------------
cat EPUB/package.opf
...
<item id="js4" href="js/script2.js" media-type="text/javascript"/>
当我用 calibre 运行时
calibre ebook2.epub
script2 不起作用。 从 script2 调用函数:
不向终端打印任何内容。 终端显示错误信息:ERROR: clbr://internal.sandbox/book/EPUB/js/script2.js:0: Failed to load module script: The server responded with a non-JavaScript MIME type of "". Strict MIME type checking is enforced for module scripts per HTML spec.
如何在 .epub 中加载 javascript 模块 文件?
谢谢, 阿夫纳
【问题讨论】:
【参考方案1】:我从here 安装了最新的 Calibre 版本 (5.22.1)。 安装后,我能够加载模块 javascript 文件,并在我启动 Calibre 的终端中看到来自 console.log() 的消息。
cat EPUB/xhtml/raw/ch1.xhtml
<!--?xml version='1.0' encoding='UTF-8'?-->
<!DOCTYPE html><html xml:lang="en-us" lang="en-us" xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xmlns:xlink="http://www.w3.org/1999/xlink">
<head>
<script type="module" src="../../js/script2.js"></script>
...
</head>
...
</html>
# --------------------------------------------------------------
cat EPUB/package.opf
...
<item id="js4" href="js/script2.js" media-type="module"/>
当我使用 calibre ebook2.epub
script2.js 运行 calibre 时,工作正常:
我可以在终端中看到来自 Console.log() 的消息。
解决方案来自this post。
【讨论】:
以上是关于如何在 epub xhtml 中加载 javascript 模块的主要内容,如果未能解决你的问题,请参考以下文章