将需要的js、css资源导入创建好的bundle下,如上图
WKWebView *webView = [[WKWebView alloc]initWithFrame:frame]]
这个filePaths 就是需要加载的 js、css文件在本地的路径,是个数组,因为可能需要加载本地的多个js、css文件, 如果需要加载的js、css文件较多,可以让后台传给你对应js、css文件的路径,注意传的路径要跟导入本地的资源路径一致,否则会加载失败。
//路径path
NSArray *pathArray = dict[@"filePath"]
if (pathArray) {
NSError *error
//获取网络的HTML
NSString * online_HTML = [NSString stringWithContentsOfURL:[NSURL URLWithString:url] encoding:NSUTF8StringEncoding error:&error]
if(!error) {
//以分割
NSArray * array_HTML = [online_HTML componentsSeparatedByString:@"</head>"]
NSMutableString *header_HTML = [[NSMutableString alloc]initWithString:array_HTML.firstObject]
for (NSString *path in pathArray) {
//注意这里的hightcharts.bundle,更改成你本地的bundle名
NSString *filePath = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"hightcharts.bundle/%@",path] ofType:nil]
if ([filePath hasSuffix:@"js"]) {
[header_HTML appendFormat:@"<script src=\"%@\"><\script>",filePath]
}else if ([filePath hasSuffix:@"css"]){
[header_HTML appendFormat:@"<link rel=\"stylesheet\"
[_webView loadHTMLString:header_HTML baseURL:[[NSBundle mainBundle] bundleURL]]
}
}
接到一个需求,需要我调用本地.js文件里的方法,我一开始就想当然的直接用webView去调用:
结果是一直在打印error,后来发现并不能去调.js文件里的东西,但是可以用html文件包装一下.js文件
这样就能访问到generatorBrainKey()方法了,但是在真机测试的时候又出现问题了,因为我们写的地址是固定的,无法找到指定的.js文件,这个问题的当时纠结了半天,结果发现解决办法就是把前面的地址去掉只保留文件名就行.
这样就没问题了.
我们创建WKWebView时必须创建WKWebViewConfiguration管理器我们可以通过他来进行js文件的注入添加,这样当WKWebView加载页面时不需要再网络加载,直接取本地文件
//同样的方法可以加载css文件,但是css注入需要转换什么格式,还没研究明白,有搞清楚的可以私信留言,一起研究