zoukankan      html  css  js  c++  java
  • 关于用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 知识点

  • 相关阅读:
    github添加ssh
    包围盒的计算以及物体移动到世界坐标中心
    123
    mysql
    建站步骤
    深度遍历和广度遍历
    Js特殊字符转义之htmlEscape()方法
    参数命名风格转换
    http 206
    js 实现快速排序
  • 原文地址:https://www.cnblogs.com/yajunLi/p/9641075.html
Copyright © 2011-2022 走看看