iOS8以后,苹果推出了新框架Webkit,提供了替换UIWebView的组件WKWebView。WKWebView 的优势不必多说,这里将两者与 JS 的交互分别做对比.
首先,和前端以及安卓同学定义好一样的方法:
js 调用原生: jsCallNativeDoSomethingWithParams()
原生调用js: nativeCallJSSendParams()
UIWebView 与 JS 的交互
引入库
#import <JavaScriptCore/JavaScriptCore.h>
加载 html
NSURL *url = [NSURL URLWithString: @"www.baidu.com"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL: url];
//如果需要在加载请求的时候用 post 请求传参数的话,加上下面三句.WKWebView这个方式不行,下面有解决方法
NSString *body = [NSString stringWithFormat: @"arg1=%@&arg2=%@", @"val1",@"val2"];
[request setHTTPMethod: @"POST"];
[request setHTTPBody: [body dataUsingEncoding: NSUTF8StringEncoding]];
[self.webView loadRequest: request];
js 调用原生的两种方式:
第一种: 采用协议方法
添加协议并遵守
@protocol TestJSExport <JSExport>
- (void)jsCallNativeDoSomethingWithParams:(NSString *) jsonStr;
@end
@interface JSCallOCViewController : UIViewController<UIWebViewDelegate,TestJSExport>
@end
然后再把方法进行关联
#pragma mark - UIWebViewDelegate
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
self.context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
// 打印异常
self.context.exceptionH