WKWebview加载本地HTML资源文件

前言:

iOS9.0之后苹果提供了一个加载本地HTML文件的方法,即

[webView loadFileURL:fileURL allowingReadAccessToURL:baseUrl]

但是我们现在开发一般需要适配到iOS8.0以上,所以我们也需要知道iOS9.0系统之前的加载方式。本文是把本地的HTML文件放在iOS的沙盒文件Document文件中,这个路径你可以自定义,只要能获取的到就好。

一、获取本地HTML的路径:

本地HTML的文件分布一般是这样的


WKWebview加载本地HTML资源文件_第1张图片
file.png

1.获取到本地HTML文件的入口,一般是 index.html

 NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0] stringByAppendingPathComponent:@"html"] stringByAppendingPathComponent:@"index.html"];

2.获取到入口文件的上一级目录

 NSString *baseFilePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0] stringByAppendingPathComponent:@"html"];

3.再把本地路径转化为URL格式,供加载HTML使用

 NSURL *fileURL = [NSURL fileURLWithPath:filePath];
 NSURL *baseUrl = [NSURL fileURLWithPath:baseFilePath];

二、iOS9.0和以上系统使用的加载方式

[webView loadFileURL:fileURL allowingReadAccessToURL:baseUrl];

三、通用的加载方式(即iOS9.0以上和以前都适用)

NSURL *fileUrl = [self fileURLForBuggyWKWebView8WithFileURL:baseUrl];

[webView loadRequest:[NSURLRequest requestWithURL:fileUrl]];

- (NSURL *)fileURLForBuggyWKWebView8WithFileURL: (NSURL *)fileURL {
    NSError *error = nil;
    if (!fileURL.fileURL || ![fileURL checkResourceIsReachableAndReturnError:&error]) {
        return nil;
    }
    NSFileManager *fileManager= [NSFileManager defaultManager];
    NSURL *temDirURL = [[NSURL fileURLWithPath:NSTemporaryDirectory()] URLByAppendingPathComponent:@"www"];
    [fileManager createDirectoryAtURL:temDirURL withIntermediateDirectories:YES attributes:nil error:&error];
     NSURL *htmlDestURL = [temDirURL URLByAppendingPathComponent:fileURL.lastPathComponent];
    [fileManager removeItemAtURL:htmlDestURL error:&error];
    [fileManager copyItemAtURL:fileURL toURL:htmlDestURL error:&error];
    NSURL *finalHtmlDestUrl = [htmlDestURL URLByAppendingPathComponent:@"index.html"];
    return finalHtmlDestUrl;
}

最后:

学习的同时也要多多总结,这是我的爬坑经验,希望对你有帮助,如有错误,多多指教。

你可能感兴趣的:(WKWebview加载本地HTML资源文件)