JS与Native的调用

方法有好几种,现在知道的话,是三种比较好

一、url截取的方式

  • OC调用JS
    与h5端协商好协议,在- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType方法中接入request的url,来进行判断,调用native的方法。
  • JS调用OC
   NSString *jsStr = [NSString stringWithFormat:@"showAlert('%@')",@"这里是JS中alert弹出的message"];
    [self.webView stringByEvaluatingJavaScriptFromString:jsStr];

二、使用库JavaScriptCore

在iOS 7之后,apple添加了一个新的库JavaScriptCore,用来做JS交互,因此JS与原生OC交互也变得简单了许多。
首先导入JavaScriptCore库, 然后在OC中获取JS的上下文

  • JS调用OC
- (void)webViewDidFinishLoad:(UIWebView *)webView {
    //JS调用OC的方法
    JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
    context [@"onClickOC"] = ^(NSString *string) {
        NSLog(@"onClickOC == %@",string);
        dispatch_async(dispatch_get_main_queue(), ^{
        //在block中,要回到主线程刷新界面
            UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"方式二" message:@"这是OC原生的弹出窗" delegate:self cancelButtonTitle:@"收到" otherButtonTitles:nil];
            [alertView show];
        });
    };
}
  • OC调用JS
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    //OC调用JS的方法
    JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
    //准备执行的js代码 test js OC 是传给js的参数,(字符串是单引号)
    NSString *alertJS = @"showAlert('OC调用JS的方法')";
    //通过oc方法调用js的alert
    [context evaluateScript:alertJS];
}

以上参考文章:
https://www.jianshu.com/p/d19689e0ed83

三、WKWebView

参考文章:
https://www.jianshu.com/p/e09305d90fba
https://www.jianshu.com/p/99c3af6894f4

你可能感兴趣的:(JS与Native的调用)