WKWebView加载本地HTML失败 问题记录

方案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 初始化时对 WKWebViewConfigurationpreferences 相关属性进行设置;

    //不通过用户交互,是否可以打开窗口
    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及相关资源所在文件夹路径;
网上很多关于该问题的解决方案,FileURLAccessURL 使用同一值,既使用本地HTML路径,我在真机的过程中都是失败的;
测试真机版本:iPhone 5s(iOS 11.3) 模拟器版本:iOS 11.4

你可能感兴趣的:(WKWebView加载本地HTML失败 问题记录)