最近做一个项目总涉及到了UIWebView中js和oc的交互问题,找了各种资料在此整理一下
1.js调用OC
JS发起一个假的URL请求,然后利用UIWebView的代理方法拦截这次请求,然后再做相应的处理
- (BOOL)webView:(UIWebView *)webViewshouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
NSURL *url = request.URL;
if ([url.scheme isEqualToString:@"taotao"]){
if ([url.host isEqualToString:@"finishFunction"]){
[self popView];
}else if ([url.host isEqualToString:@"showHelp"]){
[self goToHelp];
}
// else if([url.host isEqualToString:@"changeHelpIndex"]){
//
//获取URL上面的参数
//// NSDictionary *params = [self getParams:[url query]];
//// NSInteger index = [params[@"index"]integerValue];
//// NSLog(@"==%d",index);
// }else if([url.host isEqualToString:@"setHelpIndexCount"]){
//
//获取URL上面的参数
//// NSDictionary *params = [self getParams:[url query]];
//// NSInteger index = [params[@"indexCount"]integerValue];
//// NSLog(@"==%d",index);
// }
}
return YES;
}
可以参考www.jianshu.com/p/d19689e0ed83这个地址
2.在iOS 7之后,apple添加了一个新的库JavaScriptCore,用来做JS交互
第一步导入xcode自带的javaScriptCore.framework
第二步#import 导入头文件
第三版 开始写代码
注意项:如果是页面加载完后就要执行的js需要写在
- (void)webViewDidFinishLoad:(UIWebView *)webView{}这个函数里面
如果js实在触发了某个事件后才调用的函数 需要写在didLoad里面
可以参考下面的地址这个介绍的很明确
JavaScriptCore框架在iOS7中的对象交互和管理 – Ider
大家有疑问的可以给我留言