在ios9以上版本我們加載本地html只需要用webView.loadHTMLString加載就可以,但在ios8中是無法用這個方法加載的
解決方案:
將本地的HTML相關(guān)文件移動到tmp文件夾下(tmp下的子文件夾也可以),一定要是tmp下,其它文件夾下不可以,然后用webView.load(URLRequest)方法進行加載。而直接用webView.load(URLRequest)加載APP中的HTML文件是無法成功的。
其實放在tmp的原因很簡單webView.load是加載網(wǎng)絡(luò)html的方法,而網(wǎng)絡(luò)中的html會緩存在tmp下,也就是說webView.load加載的tmp下的HTML文件被看成是網(wǎng)絡(luò)加載了
import UIKit
class HTMLTempManager: NSObject {
static let shard = HTMLTempManager()
//需要移動到tmp下的文件列表
let files = ["view.html", "jquery.js"]
//HTML模板的本地路徑
var viewHTMLPath:String {
if #available(iOS 9.0, *) {
let bundle = Bundle(for: type(of: self))
let path = bundle.path(forResource: "view.html", ofType: nil)
return path ?? ""
}else{
let fileDirector = NSTemporaryDirectory()
return fileDirector + localDirectorName + "/" + "view.html"
}
}
//ios9.0以下版本將題庫模板移動到本地文件
func handleFiles() {
if #available(iOS 9.0, *) {
return
}else{
DispatchQueue(label: "MoveHTMLTemp").async {
self.moveToTmp()
}
}
}
let localDirectorName = "HTMLTemp"
func moveToTmp() {
let bundle = Bundle(for: type(of: self))
let fileDirector = NSTemporaryDirectory()
let dirPath = fileDirector + localDirectorName
if !FileManager.default.fileExists(atPath: dirPath) {
do{
try FileManager.default.createDirectory(atPath: dirPath, withIntermediateDirectories: true, attributes: nil)
}catch{
print("創(chuàng)建HTMLTemp文件夾出錯")
return
}
}
for fileName in files {
guard let path = bundle.path(forResource: fileName, ofType: nil) else{
continue
}
let toPath = dirPath + "/" + fileName
do{
try FileManager.default.copyItem(atPath: path, toPath: toPath)
}catch let err{
print("\(fileName)復(fù)制出錯: \(err)")
}
}
}
}
需要在使用前調(diào)用handleFiles處理好文件,我一般放到APP啟動時,因為是異步執(zhí)行,所以不用擔(dān)心會占用太多APP加載時間
let webView = WKWebView()
let path = HTMLTempManager.shard.viewHTMLPath
webView.load(URLRequest(url: URL(fileURLWithPath: path)))