WKWebView加载本地HTML文件 图片不显示

如题(UIWebView没这事,WKWebView的bug),我在进行邮件Native开发时,进行邮件详情显示时,遇到了问题;邮件正文是用WKWebView进行加载的,而WKWebView加载本地沙盒的图片时,在模拟器上可以读取到图片,但是到了真机上图片就读取不到了;在网上查了很多资料,最终找到了解决办法,特此记录一下;感谢:http://www.cocoachina.com/bbs/read.php?tid-1717986-fpage-189-page-1.html 和 https://www.jianshu.com/p/db6386fada10

因为需要将网页进行本地缓存,所以网页是通过NSString来进行传输的

首先,我加载的网页是由String转化来的,加载方式如下:

[self.webView loadHTMLString:htmlString baseURL:[NSURL URLWithString:@"file:///"]];

htmlString中有图片信息,其他信息可以统一存储,但是网页中嵌套的图片需要单独进行缓存处理;先将原始htmlString中图片源码串给扣出来,通过约定好的方法,将图片下载到本地沙盒中(查看真机沙盒目录:https://www.jianshu.com/p/1579cbcacdf5);然后将路径重新拼接替换掉图片src的原始路径,再把拼接好的塞回原位置;下面介绍具体路径的替换方法:

首先Pod集成GCDWebServer
#import 
// 2.定义全局属性
@property (strong, nonatomic) GCDWebServer *webSever;
// 在合适的地方配置本地webServer
    // 3. 主要代码
// 开启webServer
- (void)startGCDWebServer {
    // 3. 主要代码
    _webSever = [[GCDWebServer alloc]init];
    [_webSever addGETHandlerForBasePath:@"/" directoryPath:NSHomeDirectory() indexFilename:nil cacheAge:3600 allowRangeRequests:YES];
    [_webSever startWithPort:80 bonjourName:nil];
}
    // 好了,这就结束了!下面就是拼接路径了
    // 栗子:文件存在Library/Caches下有一个文件(文件名:xxx)
    NSString *localPath = [NSString stringWithFormat:@"http://localhost/Library/Caches/%@", fileName];
注意:需要首先开启webServer服务

把localPath塞回htmlString中对应位置就能显示图片了
其他具体的处理就根据自身要求进行配置,记住用完需要手动关闭WebServer,代码:

// 关闭webserver
- (void)closeGCDWebServer {
    // 这也是为什么要定义全局属性的原因
    [_webSever stop];
    _webSever = nil;
}

荆轲刺秦王!

你可能感兴趣的:(WKWebView加载本地HTML文件 图片不显示)