如何在WKWebView中加载ePub?

3

我有一个WKWebView子类,可以像Google一样显示网页。不幸的是它不能在本地文件系统中显示具有有效文件URL的ePub文件。没有返回错误。

可能我需要在通过WKWebView打开之前对ePub文件进行某种处理?

这就是我正在做的事情:

[self.webView loadRequest:[NSURLRequest requestWithURL:fileURL]];

使用UIWebView,我可以打开任何一个ePub文件。但是我不能使用UIWebView,因为它已经被弃用并即将被删除。


这个对你没有帮助吗?https://dev59.com/B5Lea4cB1Zd3GeqP5a5P - mkrieger1
2个回答

1
解决了。正确的方法:

[self.webView loadFileURL:URL.filePathURL allowingReadAccessToURL:URL.filePathURL];

或者:

NSString *htmlString = [NSString stringWithContentsOfFile:URL.filePathURL.path encoding:NSUTF8StringEncoding error:nil];

[self.webView loadHTMLString:htmlString baseURL:nil];

0
首先,有一个已弃用的库FolioReaderKit,它可以很好地呈现不同的*.epub文件。然而,它没有得到维护,并且使用的是UIWebView,这将阻止应用程序使用它上传到AppStore。
其次,我找到的唯一一个实际的iOS SDK,可以为您提供完整的UI解决方案,即skyepubAdobe,但它们部分要求付款。
但是,在查看代码、示例和教程时,我学到了很多东西...
经过很多避让后,我得出了以下结论:
  1. EPUB基本上是一个包含在网站中的zip文件,通常包括一些带有图片、CSS和字体的index.html文件。什么是EPUB

  2. 要在iOS本地提供EPUB,您需要解压缩它并在其后面提供主文件(我们再次谈论的是html文件的主要用例)。您可以使用不同的库,如EPUBKit

  3. 当解析本地文件时,您可能需要允许访问本地文件,这可能需要允许非TLS请求...

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0">
    <dict>
    <key>NSAllowsArbitraryLoads</key> <true/> 
    <key>NSExceptionDomains</key> <dict>
    <key>localhost</key> <dict>
    <key>NSExceptionAllowsInsecureHTTPLoads</key> <true/>  
    <key>NSExceptionMinimumTLSVersion</key> <string>TLSv1.2</string>  
    <key>NSExceptionRequiresForwardSecrecy</key> <true/>
    <key>NSIncludesSubdomains</key> <true/>
    <key>NSRequiresCertificateTransparency</key> <false/>
    <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key> <true/>   
    <key>NSThirdPartyExceptionMinimumTLSVersion</key <string>TLSv1.2</string>    
    <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <true/>
    </dict> 
    </dict>
    </dict> 
    </plist>
    
  4. 您可能需要添加自定义的CSS和JS代码(在WKWebView中评估,您将使用它来加载HTML文件),以适应您想要提供的UI。一个非常好的例子是Style.css和Bridge.js文件及其在FolioReaderKit中的使用,这对我帮助很大。

希望这能为EPUB和iOS带来一些启示。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接