最近也遇到这个问题,把我解决的思路记录一下
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方法的讲解,可以参考这篇 ,写得很棒:
2、对于ios9之前系统,我们就要通过其他捷径来实现了,根据其他资料查询,找到一种如下:
将document下的html等资源文件,拷贝到tmp下,然后在请求时,将路径转为tmp下即可。
不过tmp文件有个不定时会被清理的隐患,所以最好在每次启动时检测一遍。
如何实现可参考:
3、此外,我发现除了loadrequest方法,loadHTMLString也会存在以上问题
我实验了很多次,loadHTMLString请求数据时,模拟器可以正常显示有外联样式的html,不过在真机下就不行了,如果用这种方法,可能只能用其他方式处理了
比如:
1、改用uiwebview
2、转换思路,如果之前用html拼接好内容,我们可以提取出内容,然后create到本地,再用 loadFileURL 方式加载即可。
4、参考文档: