方案1、loadRequest:加载本地HTML
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:dirPath]]];
- 结果,模拟器加载正常,真机调试加载不成功,空白页;
方案2、 loadFileURL: allowingReadAccessToURL:加载本地HTML
NSURL *fileURL = [NSURL fileURLWithPath:dirPath];
[self.webView loadFileURL:fileURL allowingReadAccessToURL:fileURL];
- 结果,能正常加载HTML,但是真机调试中不能加载相关JS及资源文件;模拟器正常
方案3、loadHTMLString:baseURL:加载本地HTML
NSURL *baseURL = [NSURL fileURLWithPath:basePath];
NSString * htmlCont = [NSString stringWithContentsOfFile:dirPath
encoding:NSUTF8StringEncoding
error:nil];
[self.webView loadHTMLString:htmlCont baseURL:baseURL];
- 结果,同2;
解决方案:
loadFileURL: allowingReadAccessToURL:
WKWebView 初始化时对 WKWebViewConfiguration 中 preferences 相关属性进行设置;
//不通过用户交互,是否可以打开窗口
configuration.preferences.javaScriptCanOpenWindowsAutomatically = true;
//是否支持JavaScript
configuration.preferences.javaScriptEnabled = true;
[configuration.preferences setValue:@YES forKey:@"allowFileAccessFromFileURLs"];
加载本地HTML
NSURL *fileURL = [NSURL fileURLWithPath:dirPath];
NSString *accessPath = [documentsPath stringByAppendingPathComponent:@"HTML所在文件夹名称"];
NSURL *accessURL = [NSURL fileURLWithPath:accessPath];
[self.webView loadFileURL:fileURL allowingReadAccessToURL:accessURL];
- 以上,本地HTML加载成功;
PS:
loadFileURL: allowingReadAccessToURL: 该方法iOS9.0以后才支持,需要注意;
FileURL为本地HTML路径;
AccessURL 为本地HTML及相关资源所在文件夹路径;
网上很多关于该问题的解决方案,FileURL 和 AccessURL 使用同一值,既使用本地HTML路径,我在真机的过程中都是失败的;
测试真机版本:iPhone 5s(iOS 11.3) 模拟器版本:iOS 11.4