接到一个需求,需要我调用本地.js文件里的方法,我一开始就想当然的直接用webView去调用:
//需要调用的文件为bundle.js
self.webView = [[WKWebView alloc] initWithFrame:self.view.frame];
_webView.navigationDelegate = self;
[_webView loadRequest:[[NSURLRequest alloc] initWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"bundle" ofType:@"js"]]]];
//WKWebView代理方法 generatorBrainKey()为需要调用的js方法
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
[webView evaluateJavaScript:@"generatorBrainKey()" completionHandler:^(id _Nullable result, NSError * _Nullable error) {
NSLog(@"%@",result);
NSLog(@"%@",error);
}];
}
结果是一直在打印error,后来发现并不能去调.js文件里的东西,但是可以用html文件包装一下.js文件
//text.html里的内容
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<script type="text/javascript" src="/Users/lijing/Desktop/test/test/bundle.js"></script>
</head>
</html>
这样就能访问到generatorBrainKey()方法了,但是在真机测试的时候又出现问题了,因为我们写的地址是固定的,无法找到指定的.js文件,这个问题的当时纠结了半天,结果发现解决办法就是把前面的地址去掉只保留文件名就行.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<script type="text/javascript" src="bundle.js"></script>
</head>
</html>
这样就没问题了.