概述
在实际的iOS开发中,我们有很多的地方需要通过WKWebView加载本地的文件。但是由于WKWebview存在着一些跨域的问题。UIWebView直接加载的方法不能正常使用了。这里就和大家分享一下常见的几种处理方法。
GCDWebServer启动本地服务器加载
就是在本地启动一个本地服务器,可以使用GCDWebServer这个库,大家感兴趣的话可以看看。GCDWebServer介绍的文章(https://www.jianshu.com/p/534632485234)
将文件复制到沙盒tmp文件夹下
将文件复制一份到沙盒中的tmp文件夹下进行访问。具体代码如下:
// Fallback on earlier versions
NSString *filePath = [NSString stringWithFormat:@"%@%@",JKSandBoxPathTemp,[NSURL URLWithString:self.url].lastPathComponent];
self.tempDirectoryFilePath = filePath;
[JKSandBoxManager copyFileFrom:[NSURL URLWithString:self.url].path to:filePath];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL fileURLWithPath:filePath] cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:20];
[_webView loadRequest:request];
这种做法的好处是iOS8 之后的操作系统都可以使用。坏处就是每次都需要进行复制,而且关闭页面后需要删除复制的文件。反复操作增大耗电量,减少内存的使用寿命。其中JKSandBoxManager
下载地址如下:https://github.com/xindizhiyin2014/JKSandBoxManager
使用iOS9 之后的加载方法
使用iOS9 之后新出的方法去加载,这个相对来说比较的简单。具体代码如下:
WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
[config.preferences setValue:@YES forKey:@"allowFileAccessFromFileURLs"];
_webView = [[WKWebView alloc] initWithFrame:self.view.bounds
configuration:config];
if ([self.url hasPrefix:@"file://"]) {
if (@available(iOS 9.0, *)) {
NSURL *accessURL = [[NSURL URLWithString:self.url] URLByDeletingLastPathComponent];
[_webView loadFileURL:[NSURL URLWithString:self.url] allowingReadAccessToURL:accessURL];
}
}
这些方法我这边都已经检测过了,已经集成到了线上的app,大家可以放心使用哦。
更多优质文章,可以微信扫码关注:
最后
以上就是难过蛋挞为你收集整理的iOS WKWebView加载本地文件之权威解说的全部内容,希望文章能够帮你解决iOS WKWebView加载本地文件之权威解说所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复