美文网首页
WKWebView加载本地HTML文件 图片不显示

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

作者: oc123 | 来源:发表于2018-11-20 15:07 被阅读0次

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

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

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

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

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

    首先Pod集成GCDWebServer
    #import <GCDWebServer.h>
    // 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文件 图片不显示

          本文链接:https://www.haomeiwen.com/subject/gqfxqqtx.html