60. 解決IOS8.0版本W(wǎng)KWebView無法正常加載本地HTML

在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)))
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容