首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用epub.js在HTML中显示电子酒吧书籍的封面?

如何使用epub.js在HTML中显示电子酒吧书籍的封面?
EN

Stack Overflow用户
提问于 2020-01-13 23:38:56
回答 1查看 1.5K关注 0票数 2

我使用EPUB.js和Vue来呈现一个Epub。我想显示几本电子酒吧书籍的封面图片,这样用户就可以点击其中一本就可以看到整本书了。

没有关于如何做到这一点的文档,但是有几种方法表明这是可能的。

首先,有Book.coverUrl()方法。

请注意,我在Vue模板中设置了一个img src属性,该属性等于bookCoverSrc。设置this.bookCoverSrc将自动更新img标记的src并导致图像显示(如果src是有效的/解析的)。

代码语言:javascript
复制
this.book = new Epub(this.epubUrl, {});
this.book.ready.then(() => {
  this.book.coverUrl().then((url) => {
    this.bookCoverSrc = url;
  });
})

上面的话不起作用。urlundefined

奇怪的是,cover属性直接出现在book上。所以,我试着:

代码语言:javascript
复制
this.book = new Epub(this.epubUrl, {});
this.book.ready.then(() => {
  this.coverSrc = this.book.cover;
});

this.book.cover解析为OEBPS/@public@vhost@g@gutenberg@html@files@49010@49010-h@images@cover.jpg,因此,至少当我将其设置为src时,会产生对http://localhost:8080/OEBPS/@public@vhost@g@gutenberg@html@files@49010@49010-h@images@cover.jpg的请求,该请求200 s,但不返回任何内容。这可能是webpack开发服务器到200的一个怪癖,但是如果我在Chrome工具中浏览源代码,我也没有看到任何迹象表明这样的URL应该解决。

医生帮不上忙。我在谷歌上搜索并找到了这个github问题从2015年开始。,他们的代码就像

代码语言:javascript
复制
$("#cover").attr("src", Book.store.urlCache[Book.cover]);

有趣的是,Book.store.urlCache在码头上什么都没有。正如预期的那样,urlCacheundefined,尽管book.store存在。但是我没有看到任何能帮助我显示封面图像的东西。

使用epub.js,如何显示Epub文件的封面图像?注意到,简单地呈现Epub文件的第一个“页面”(通常是封面图像)并不能解决我的问题,因为我想列出几个epub文件的封面图像。

还请注意,我认为我使用的epub文件有封面图像。这些文件是伊索寓言爱尔兰奇观

编辑:我可能首先需要在book.cover提供的url上使用book.cover。我这样做了,并试图console.log它,但它是一个巨大的博客,奇怪编码的文本,看上去如下:

代码语言:javascript
复制
����

所以,我认为这是一个直接的图像,我需要找到一种方法,让它以某种方式进入文档?

EDIT2:那个大的blob是类型: string,我不能atob()btoa()它。

EDIT3:只要对this.book.cover提供的url进行fetch处理,当它不知道还能做什么时,它就会返回my index.html,这是webpack开发服务器的默认行为。

EDIT4:下面是来自epub.js的book.coverUrl代码

代码语言:javascript
复制
    key: "coverUrl",
    value: function coverUrl() {
        var _this9 = this;

        var retrieved = this.loaded.cover.then(function (url) {
            if (_this9.archived) {
                // return this.archive.createUrl(this.cover);
                return _this9.resources.get(_this9.cover);
            } else {
                return _this9.cover;
            }
        });

        return retrieved;
    }

如果我使用this.archive.createUrl(this.cover)而不是this.resources.get,我实际上得到了一个函数URL,它看起来像blob:http://localhost:8080/9a3447b7-5cc8-4cfd-8608-d963910cb5f5。我将尝试把它放到src中,看看会发生什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-14 01:13:57

这种情况发生在我身上的原因是,coverUrl函数中的功能代码行在源代码库epub.js中注释掉了,取而代之的是编写了一行非功能代码。

因此,我不得不复制整个库,取消对好代码的注释,并删除坏代码。现在,这个函数可以正常工作了。

要做到这一点,请克隆整个epub.js项目。将该项目的package.json中的依赖项复制到您自己的。然后,将srcliblibs文件夹复制到项目中。找到一种方法来禁用eslint的位置,您放置这些文件夹,因为项目使用TAB字符的间隔,这导致我的终端挂起由于ESLINT爆炸。

npm install,因此您的node_modules中有您的和epub.js依赖项。

打开book.js.取消注释第661行,它看起来像

代码语言:javascript
复制
      return this.archive.createUrl(this.cover);

并注释掉第662行,它看起来像

代码语言:javascript
复制
      // return this.resources.get(this.cover);

现在,您可以通过将img标记的src属性设置为book.coverUrl()返回的URL来显示图像。

代码语言:javascript
复制
this.book = new Epub(this.epubUrl, {});
this.book.ready.then(() => {
  this.book.coverUrl().then((url) => {
    this.bookCoverSrc = url;
  });
})
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59725723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档