最近在写邮件的内嵌的图片显示. 对于邮件来说内嵌图片是一种特殊的附件. 所以需要把邮件 HTML 中对应的 img 的 src 换成相应的地址.
但是因为我们的附件是保存在 Documents 中, 而 WKWebView 却不能显示 Documents 中的图片. 估计是因为一个已知的bug. 在进行搜索后, 大概有以下三个解决方案;
- 采用新的API, 在 iOS 9 之后出了一个新的 API :
从第二个参数来看是可以解决这个问题的. 如果把要显示的 HTML 存储在 Documents 中, 并通过第二个参数允许访问 Documents 应该是可以解决问题. 不过因为还要支持 iOS 9 以下的系统. 我并没有尝试这个方案.
- 搭建一个简单的服务器.
这个方法太过复杂, 不到迫不得已不会采用. 但是一定是有效的.
- 将图片转换为 Base64.
HTML 是支持直接将 img 标签的 src 的值直接放一个 Base64 的编码.
比如:
<img src="data:img/png;base64, ADDDFEIONVJDSLGKJSLF ..">
利用这个特性就能绕开这个限制. 实现在 WKWebView 中显示图片. 实现也很简单. 只有两行:
let imageData = NSData(contentsOfURL: imageURL)
// 默认的选项正好符合要求.
let encodedString = imageData.base64EncodedStringWithOptions([])