如何在WKWebView中将网站保存到本地?

问题描述 投票:0回答:1

我们希望首先使用 URL 显示网站,一旦加载,我们如何将数据保存在缓存或 cookie 中,以便之后即使用户离线,它也会加载该形式?

我们遇到的一些解决方案是:

  1. WKWebViewConfiguration().websiteDataTypes = [WKWebsiteDataTypeOfflineWebApplicationCache] - 但此方法不再起作用
  2. 我们可以在本地保存网站数据(可以下载其内容 - 如何?)

一些参考:https://stackoverflow.com/a/53512299

ios swift cookies wkwebview wkwebviewconfiguration
1个回答
0
投票

请检查以下代码以获取和保存网站数据

 if let url = URL(string: "TYPE YOUR URL") {
        let request = URLRequest(url: url)
        webView.load(request)
        let task = URLSession.shared.dataTask(with: url) { data, response, error in
            if let error = error {
                print("Error: \(error)")
                return
            }
            
            if let data = data {
                self.saveDataLocally(data: data)
            }
        }
        task.resume()
    }

//保存数据到本地的函数

func saveDataLocally(data: Data) {
    let fileManager = FileManager.default
    guard let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first else {
        return
    }
    
    let htmlURL = documentsDirectory.appendingPathComponent("index.html")
    
    do {
        try data.write(to: htmlURL, options: .atomic)
    } catch {
        print("Error saving data: \(error)")
    }
}

要获取保存的数据,您可以使用下面提到的代码

let fileManager = FileManager.default
    guard let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first else {
        return
    }
    let htmlURL = documentsDirectory.appendingPathComponent("index.html")
    if fileManager.fileExists(atPath: htmlURL.path) {
        if let htmlData = try? Data(contentsOf: htmlURL) {
            webView.load(htmlData, mimeType: "text/html", characterEncodingName: "UTF-8", baseURL: htmlURL)
        }
    } else {
        print("Website content not available locally.")
    } 
© www.soinside.com 2019 - 2024. All rights reserved.