场景:web中js通过messagehandler,调用原生方法录音,录音完成之后把文件给到前端环境,前端再做上传或者别的处理。

印象中都是base64传,前端环境下是访问不到本地沙盒路径的。然后搜索了一下,居然可以,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
...
// 初始化webview设置
configuration.preferences.setValue(true, forKey: "allowFileAccessFromFileURLs")
...
...
let tempDirectoryURL = URL(fileURLWithPath: NSTemporaryDirectory(), isDirectory: true)
let fileURL = tempDirectoryURL.appendingPathComponent(audioUrl.lastPathComponent)
webView.loadFileURL(fileURL, allowingReadAccessTo: tempDirectoryURL)
let js = String(format: "%@('%@')", recordCallbackFunc, fileURL.absoluteString)
webView.evaluateJavaScript(js) { (result, error) in
if let error = error {
debugPrint("Error evaluating JavaScript: \(error)")
} else {
debugPrint("JavaScript executed successfully")
}
}