大家都知道拖动文件到Xcode中的时候有两个选择
两种引入方式造成路劲的问题,需要不一样的加载方式
1.以Create groups方式引入本地H5文件
Create groups方式添加了一个文件,以黄色文件夹的形式存在的,当你想要使用文件夹中的某个类的头文件时,你可以直接添加它的引用,因为groups下的cpp文件是会被编译的。
如果你加载本地h5选择Create groups的格式导入H5文件,会存在一个大坑,你会发现你加载了html文件,但是对应的css和js加载不出来。原因是groups方式编译完后,所有文件都是存在bundle目录下,没有层级关系了,直接引用就可以。然后html中代码往往是这样的:
html代码中还是用绝对路径去读取文件,所以导致读取不到js和css文件了!必须改成这样:
注意:html中用到的图片也必须改成直接引用。
这种加载方式我不推荐,因为需要去改html中的代码路径,这样前端人员还得维护两套代码,h5自己加载一般都是用绝对路径!
2.以Create folder references方式引入本地H5文件
选择了 Create folder references方式添加进来的文件的文件夹是蓝色的,只是将文件单纯的创建了引用,这些文件不会被编译,所以在使用的时候需要加入其路径,例如文件夹file下的demo类,其他类要引用的话就需要#import file/demo.h,否则编译器就会告诉你找不到demo.h文件。
这样加载本地H5就不会有路径问题了,而且可以直接添加参数。
我自己公司的需求是做到html方面的界面实现热更新,我的思路进入页面就判断沙盒中是否有html的一个文件夹,没有的话加载拖进去的html然后把整个html的文件全部复制到沙盒中,有的话就加载沙盒中的html文件:
然后html文件中的代码有改动,直接从服务端请求,然后通过NSFileManager对沙盒中的文件内容进行替换就可以实现html热更新了!
附上一个知识点:
iOS加载部分Html代码特殊符号需要用反斜杠\转义,例如双引号,百分号等!看情况使用。
以上是我自己测试过可以用的,可能存在一些其他的问题,希望遇到的朋友一起讨论完善!