iOS中原生和js交互

原生与js交互有集中方法:代理、JsContent

一、UIWebviewDelegate代理交互
代理交互原理较为简单,也比较强大,但是代码书代码量可能比较大。

#pragma mark - UIWebviewDelegate
- (void)webViewDidFinishLoad:(UIWebView *)webView {
    
    // 原生调用js
    [webView stringByEvaluatingJavaScriptFromString:@""];
}

- (void)webViewDidStartLoad:(UIWebView *)webView {
    
}

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    
  // js调用原生。原生通过过滤请求的字符串(可能为url,也可能是自定义协议),调用原生的方法。
    NSString *string = request.URL.absoluteString;
    NSLog(@"shouldStartLoadWithRequest:%@", string);
    
    return YES;
}

二、JSContext
JSContext是js会话。
1、js调用原生

JSContext *content = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

// 原生保证先注册方法。
content[@"jsFuncName"] = ^(id param1, id param2) {
    // code
};
...
jsFuncName(param1, param2); // H5后调用
...

2、原生调用js

JSContext *content = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

// 保证js必须有login这个方法。
[content evaluateScript:@"login('username','password')"];
或者
JSValue *JSfunc =content[@"login"];   
[JSfunc callWithArguments:@[@"username", @"password"]];  

参考iOS Webview JS交互之事件拦截获取、UIWebView-JSContext实现OC与JS交互

你可能感兴趣的:(iOS中原生和js交互)