关于用wkwebview加载沙盒documents下html文件 模拟器可以,真机不行的解决方案

最近也遇到这个问题,把我解决的思路记录一下

 

1、问题:

用wkwebview加载(loadRequest)沙盒documents下html文件 模拟器可以,真机不行

(前提是html内部含引用外联样式js等)

 

2、解决及分析:


对于uiwebview,在模拟器和真机下,我们用loadrequest都是可以请求html的,没有问题。


不过对于wk来说,在安全性上,苹果做了限制,模拟器可以,device真机上有所区别

原因是WKWebView是不允许通过loadRequest的方法来加载本地根目录的HTML文件,也就是说,我们用loadrequest方式加载的路径,由于内部引用了其他路径的内容,苹果觉得这样做不安全,就给你限制了,所以这些样式、js等就都失效了。


1、不过对于ios9及以后,我们可以使用loadFileURL来实现,这个也是苹果在ios9之后提供的api。

wkwebview.loadFileURL(url, allowingReadAccessTo: accessUrl)

参数解释:

url:html所在的path路径

allowingReadAccessTo :表示授权路径,html里使用的css、js等文件(如果有外联引用)都要包含在内。

关于loadFileURL方法的讲解,可以参考这篇 ,写得很棒:https://www.cnblogs.com/breezemist/p/4595906.html 

 


2、对于ios9之前系统,我们就要通过其他捷径来实现了,根据其他资料查询,找到一种如下:

将document下的html等资源文件,拷贝到tmp下,然后在请求时,将路径转为tmp下即可。

不过tmp文件有个不定时会被清理的隐患,所以最好在每次启动时检测一遍。

如何实现可参考:https://www.jianshu.com/p/ccb421c85b2e

 

3、此外,我发现除了loadrequest方法,loadHTMLString也会存在以上问题

我实验了很多次,loadHTMLString请求数据时,模拟器可以正常显示有外联样式的html,不过在真机下就不行了,如果用这种方法,可能只能用其他方式处理了

比如:

1、改用uiwebview

2、转换思路,如果之前用html拼接好内容,我们可以提取出内容,然后create到本地,再用 loadFileURL 方式加载即可。

 

4、参考文档:

WKWebView使用遇到的坑

iOS 8 WKWebView 知识点

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值