WebView将本地图像插入到HTML无法成功吗?

时间:2017-09-05 15:38:10

标签: html ios swift wkwebview

我的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中。但是,当我使用真正的网址时,它可以工作。我不知道原因,任何人都可以帮助我。感谢。

2 个答案:

答案 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"