iOS UIwebview替换wkwebview时遇到的坑

1、加载本地沙盒路径时

if ([_localHtml5FilePath.absoluteString hasPrefix:@"file://"])
                    {
                        [self.wkwebview loadFileURL:_localHtml5FilePath allowingReadAccessToURL:[NSURL URLWithString:[_localHtml5FilePath.absoluteString stringByDeletingLastPathComponent]]];
                    }
                    else
                    {
                        NSURLRequest  *request = [NSURLRequest requestWithURL:_localHtml5FilePath];
                        [self.wkwebview loadRequest:request];
                    }

2、路径加载出来后,一直不显示,白屏:

https://www.jianshu.com/p/af81a92b2243

解决方案:

loadFileURL: allowingReadAccessToURL:
第二个参数路径一定要弄对,即沙盒路径+HTML所在文件夹名称。

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加载成功;

3、解决跨域问题:

WKUserContentController *userContentController = [[WKUserContentController alloc] init];
    [self registerAllJavascriptWithUserContent:userContentController];
    WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
    config.userContentController = userContentController;
    config.preferences.javaScriptEnabled = YES;
    config.preferences.javaScriptCanOpenWindowsAutomatically = YES;
    config.suppressesIncrementalRendering = YES; // 是否支持记忆读取
   [config.preferences setValue:@YES forKey:@"allowFileAccessFromFileURLs"];
    if (@available(iOS 10.0, *)) {
         [config setValue:@YES forKey:@"allowUniversalAccessFromFileURLs"];
    }

重点是

 if (@available(iOS 10.0, *)) {
         [config setValue:@YES forKey:@"allowUniversalAccessFromFileURLs"];
    }

4、wkwebview在使用过程中,会遇到数据拿不到的问题,这个时候很有可能是异步加载的问题,就是在js-oc交互数据时有一个先后问题,导致数据没有拿到,会造成白屏或其他现象。(解决方式,js里接收数据时加settimeout延迟函数或者在oc中采用第三种方法:https://blog.csdn.net/FlyingKuiKui/article/details/98619845

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,574评论 1 32
  • 1.WKWebView白屏问题 WKWebView自我拥有更快的加载速度,更低的内存占用,但实际上WKWebVie...
    单线程Jack阅读 4,741评论 1 6
  • 1、WKWebView 白屏问题WKWebView 自诩拥有更快的加载速度,更低的内存占用,但实际上 WKWebV...
    无名感恩阅读 2,268评论 0 3
  • 转载:http://www.cnblogs.com/NSong/p/6489802.html 导语 WKWebVi...
    李小威阅读 4,969评论 8 9
  • 天气热出了新高度。电视新闻都已经抑制不住的开始散播让我的心更热。 今天一早就和妈妈吵架。因为她一早就开始用手机播放...
    小鱼是不老少女阅读 318评论 0 0

友情链接更多精彩内容