如何在 WKWebView 中加载 ePub?
How to load ePub in WKWebView?
我有一个 WKWebView 子类,它能够显示像 Google 这样的网页。遗憾的是,它不会在本地文件系统中显示具有有效文件 URL 的 ePub 文件。没有返回错误。
可能我需要对 ePub 文件进行某种操作才能通过 WKWebView 打开它?
这是我正在做的事情:
[self.webView loadRequest:[NSURLRequest requestWithURL:fileURL]];
对 UIWebView 执行相同的操作我能够打开我的任何 ePub 文件。但我不能使用 UIWebView,因为它已被弃用并且将被删除。
已解决。正确做法:
[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];
首先,有一个已弃用的库 FolioReaderKit,它在呈现不同的 *.epub 文件方面做得非常好。但是它没有得到维护,并且正在使用 UIWebView 这将阻止应用程序使用它上传到 AppStore。
其次,我发现唯一实际开箱即用的 iOS SDK 可以为您提供完整的 UI 解决方案 skyepub and Adobe 部分要求付款。
但是环顾 cod、示例和教程我学到了很多东西...
在回避了很多之后,我得出了以下结论:
EPUB 基本上是一个包含在网站中的 zip 文件,通常包括一些带有一些图片、css 和字体的 index.html 文件。 What is an EPUB.
要在 iOS 上本地提供 EPUB,您必须在本地解析解压缩它并提供其背后的主文件(我们再次讨论 [=49 的主要用例) =] 文件)。您可以使用不同的库,例如 EPUBKit
您可能需要在解析本地文件时允许访问它们,这可能需要允许非 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>
您可能需要添加自定义 css 和 js 代码(在将用于加载 html 文件的 WKWebView 中进行评估)以适应 UI 你想供应。
Style.css 和 Bridge.js 文件及其在 FolioReaderKit
中的用法对我有很大帮助
希望它能对 EPUB 和 iOS
有所启发
我有一个 WKWebView 子类,它能够显示像 Google 这样的网页。遗憾的是,它不会在本地文件系统中显示具有有效文件 URL 的 ePub 文件。没有返回错误。
可能我需要对 ePub 文件进行某种操作才能通过 WKWebView 打开它?
这是我正在做的事情:
[self.webView loadRequest:[NSURLRequest requestWithURL:fileURL]];
对 UIWebView 执行相同的操作我能够打开我的任何 ePub 文件。但我不能使用 UIWebView,因为它已被弃用并且将被删除。
已解决。正确做法:
[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];
首先,有一个已弃用的库 FolioReaderKit,它在呈现不同的 *.epub 文件方面做得非常好。但是它没有得到维护,并且正在使用 UIWebView 这将阻止应用程序使用它上传到 AppStore。
其次,我发现唯一实际开箱即用的 iOS SDK 可以为您提供完整的 UI 解决方案 skyepub and Adobe 部分要求付款。
但是环顾 cod、示例和教程我学到了很多东西...
在回避了很多之后,我得出了以下结论:
EPUB 基本上是一个包含在网站中的 zip 文件,通常包括一些带有一些图片、css 和字体的 index.html 文件。 What is an EPUB.
要在 iOS 上本地提供 EPUB,您必须在本地解析解压缩它并提供其背后的主文件(我们再次讨论 [=49 的主要用例) =] 文件)。您可以使用不同的库,例如 EPUBKit
您可能需要在解析本地文件时允许访问它们,这可能需要允许非 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>
您可能需要添加自定义 css 和 js 代码(在将用于加载 html 文件的 WKWebView 中进行评估)以适应 UI 你想供应。 Style.css 和 Bridge.js 文件及其在 FolioReaderKit
中的用法对我有很大帮助
希望它能对 EPUB 和 iOS
有所启发