我的ViewController中有一个WkWebView,我使用webview加载本地html。代码是这样的:
guard let path = Bundle.main.url(forResource: "editor", withExtension: "html") else {
return
}
webView.load(URLRequest(url: path))
1:我从photoLibrary中选择一张图片,然后将其保存到文档目录中。
private func fileName() -> String {
let date = Date()
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd@HH-mm-ss"
return "/" + formatter.string(from: date) + ".png"
}
func saveImage(_ image: UIImage) {
guard let imageData = UIImageJPEGRepresentation(image, 1.0) else {
return
}
let directory = NSHomeDirectory().appending("/Documents")
let path = directory.appending(fileName())
let fileManager = FileManager.default
do {
try fileManager.createDirectory(atPath: directory, withIntermediateDirectories: true, attributes: nil)
fileManager.createFile(atPath: path, contents: imageData, attributes: nil)
} catch {
SHLog("saveImage: \(error)")
}
}
2:我获取了图像路径,然后使用webView的方法插入图像。
func evaluateJs(_ imagePath: String) {
webView.evaluateJavaScript("insertImage('\(imagePath)')") { (response, error) in
}
}
insertImage()是一个来自本地js文件的方法,它可以将图像插入到html中。
如果我使用本地imagePath,我无法将图像插入到html中。但是,当我使用真正的网址时,它可以工作。我不知道原因,任何人都可以帮助我。感谢。
答案 0 :(得分:0)
您的问题可能是由于WKWebViews安全策略不允许您访问应用程序的本地文件夹。
查看WKWebView loadFileURL的文档。您应该能够传递allowingReadAccessTo
参数中的文档目录或完整图像URL,以便您访问所需的图像。
如果您有图片的网址,我宁愿使用网址,而不是尝试在本地存储和加载图片。您没有在文档目录中使用存储空间,WKWebView旨在从Web加载内容。
答案 1 :(得分:0)
在我的情况下,首先为您的图像文件的父文件夹分配baseURL。然后在html中插入整个URL路径。
<img src="/var/mobile/Containers/Data/Application/C217F3BD-1A1B-438A-A436-D878411C7849/Documents/48C4B007-A950-46D2-A719-E025482710A0/images/79042B1F-E11C-42D1-8B49-DD3A0016F421.jpg"