应该说 epub只是html文件,通过第三方压缩软件压缩而成。因此可以通过第三方软件解压。
而mobi文件是根据简单的压缩原理(见上篇文章)为了和mobi格式文件比较,才有此篇内容。
闲话少叙,直接上代码:
(function handleFile(f) { //网页文件中标签file 打开的文件。 var new_zip= new JSZip(); //创建 jszip 实例 var entry=null; var showflag=true; new_zip.loadAsync(f).then(function(zip) { //f是file标签打开的文件即:epub图书文件。 zip.forEach(function (relativePath, zipEntry) { if(zipEntry.name.indexOf(".jp")>0 && showflag){ entry=zip.file(zipEntry.name).async("base64"); //参数"base64"很重要,否则显示不了封面 showflag=false; if(entry) entry.then(function(data){ data='<img src="data:image;base64,'+data+'" width="100%" height="100%" >'; $(".cover").html(data); //显示封面图片(可能有很多图片,只选一张作为封面) }); } else if(zipEntry.name.indexOf("htm")>0) { //epub 图书有用“xhtml、html、htm”为扩展名的。 entry=zip.file(zipEntry.name).async("string"); if(entry) entry.then(function(text){ text=text.split("<body")[1]; text=text.split("</body>")[0]; text=text.replace(/<\/p>/gi,"\n"); text =text.replace(/<[^>]*>|/g,""); text=text.replace(/\n\n\n/g,"\n"); text=text.replace(/\n\n/g,"\n"); htmlText.push(textToHtml(text));//存放全部章节内容 }); } }); }, function (e) { return e.message }); })(f);
比较mobi文件,解压后得到的文件和图片都是一样的,这里是引用jszip进行解压。
以上代码在360浏览器和火狐浏览器测试通过。苹果浏览器不支持。
测试效果:
测试图书为1600本英文图书(10年前网上就有了,内容还算完整,但许多没有目录...),但多数都能通过示例代码打开。
跟以前文章一样贴上效果图:
管理博客