美文网首页
iOS 9.0 以下使用WKWebView加载本地资源问题

iOS 9.0 以下使用WKWebView加载本地资源问题

作者: izsm | 来源:发表于2017-12-15 17:22 被阅读0次

当使用loadRequest来读取本地的资源时,WKWebView是无法读取成功的,后台会出现如下的提示:

Could not create a sandbox extension for /

原因是WKWebView是不允许通过的loadRequest的方法来加载本地根目录的资源文件。
而在iOS9的SDK中加入了以下方法来加载本地的HTML文件:

[WKWebView loadFileURL:allowingReadAccessToURL:]

但是在iOS9以下的版本是没提供这个便利的方法的以下为解决方案的思路,就是在iOS9以下版本时,先将本地文件的数据复制到tmp目录中,然后再使用的loadRequest来加载。

// 9.0以下将文件夹copy到tmp目录
- (NSURL *)fileURLForBuggyWKWebView:(NSURL *)fileURL {
    NSError *error = nil;
    if (!fileURL.fileURL || ![fileURL checkResourceIsReachableAndReturnError:&error]) {
        return nil;
    }
    
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSURL *temDirURL = [NSURL fileURLWithPath:NSTemporaryDirectory()];
    [fileManager createDirectoryAtURL:temDirURL withIntermediateDirectories:YES attributes:nil error:&error];
    
    NSURL *dstURL = [temDirURL URLByAppendingPathComponent:fileURL.lastPathComponent];
    
    [fileManager removeItemAtURL:dstURL error:&error];
    [fileManager copyItemAtURL:fileURL toURL:dstURL error:&error];
    
    return dstURL;
}

// 加载本地资源
- (void)loadFileURL:(NSString *)fileURL {
    NSString *readAccessToURL = [fileURL stringByDeletingLastPathComponent];
    if (@available(iOS 9.0, *)) {
        [self.wkWebView loadFileURL:[NSURL fileURLWithPath:fileURL] allowingReadAccessToURL:[NSURL fileURLWithPath:readAccessToURL]];
    } else { // 9.0以下
        if(fileURL) {
            NSURL *fileUrl = [NSURL fileURLWithPath:fileURL];
            // 把文件夹转到tmp目录
            fileUrl = [self fileURLForBuggyWKWebView:fileUrl];
            NSURL *realUrl = [NSURL fileURLWithPath:fileUrl.path];
            NSURLRequest *request = [NSURLRequest requestWithURL:realUrl];
            [self.wkWebView loadRequest:request];
        }
    }
}

相关文章

网友评论

      本文标题:iOS 9.0 以下使用WKWebView加载本地资源问题

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