WKWebView 从文档目录加载 html 在设备上不起作用
Posted
技术标签:
【中文标题】WKWebView 从文档目录加载 html 在设备上不起作用【英文标题】:WKWebView load html from document directory don't work on device 【发布时间】:2017-11-20 18:43:34 【问题描述】:所以,我已经下载了带有 html 文件的文件夹。
folders struct
我尝试在 WKWebView 中打开它。
let documentsUrl = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]
let url = documentsUrl.appendingPathComponent("\(model.sourceFileId)/index.html")
self.webView.loadFileURL(url, allowingReadAccessTo: url)
在模拟器上运行良好
screenshot from simulator
但不在设备上
screenshot from device
看起来只是无法打开 css 和图像文件。但为什么?我该如何解决这个问题?
【问题讨论】:
我敢打赌它与 html 中的路径有关。可能无法找到 css 和图像文件。 @Dima 你解决了吗? 【参考方案1】:将文件复制到NSTemporaryDirectory()
并打开文件URL,它就可以工作了。我用 Objective-C 风格编写了我的代码。
NSString *basePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"dirName"];
NSString *indexHtmlPath = [basePath stringByAppendingPathComponent:@"index.html"];
NSString *htmlString = [NSString stringWithContentsOfFile:indexHtmlPath encoding:NSUTF8StringEncoding error:nil];
NSURL *baseURL = [NSURL fileURLWithPath:basePath];
[self.wkWebView loadHTMLString:htmlString baseURL:baseURL];
【讨论】:
【参考方案2】:使用临时目录保存和打开文档的 Swift 版本。
let docData = data as NSData
let tempDirectory = URL(fileURLWithPath: NSTemporaryDirectory())
let tmpURL = tempDirectory.appendingPathComponent(response?.suggestedFilename ?? "fileName.pdf")
do
try data.write(to: self.tmpURL! )
catch
self.showError()
return
if FileManager.default.fileExists(atPath: self.tmpURL!.path)
DispatchQueue.main.async
self.webView.loadFileURL(self.tmpURL!, allowingReadAccessTo: self.tmpURL!)
else
self.showError()
【讨论】:
以上是关于WKWebView 从文档目录加载 html 在设备上不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 WKWebview 从 iPad 的 Document 目录加载 javascript 和 css 资源?