博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于用wkwebview加载沙盒documents下html文件 模拟器可以,真机不行的解决方案
阅读量:5051 次
发布时间:2019-06-12

本文共 979 字,大约阅读时间需要 3 分钟。

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

 

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、参考文档:

转载于:https://www.cnblogs.com/yajunLi/p/9641075.html

你可能感兴趣的文章
Combination Sum II
查看>>
对象数组的练习
查看>>
xamarin android 实现二维码带logo生成效果
查看>>
requirejs amd module load example
查看>>
实验13
查看>>
递归插入排序
查看>>
iOS学习之iOS程序名称及内容国际化(本地化)
查看>>
生产案例、Linux出现假死,怎么回事?
查看>>
树结构(三)---- 多路查找树
查看>>
07深入理解C指针之---指针类型和长度
查看>>
06深入理解C指针之---指针操作和比较
查看>>
SQL Server发送邮件的存储过程
查看>>
【20160924】GOCVHelper 图像处理部分(3)
查看>>
音视频处理中的硬压缩与软压缩
查看>>
STL-map
查看>>
第三周进度条
查看>>
Keil的lib生成个人总结
查看>>
java程序员常见面试题
查看>>
java @SuppressWarnings注解
查看>>
C语言位域
查看>>