美文网首页
WKWebView加载本地HTML失败 问题记录

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

作者: 魈畈 | 来源:发表于2018-07-09 11:18 被阅读192次

    方案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失败 问题记录

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