OC与JS交互 - 传统交互方式

UIWebView中OC与JS的传统交互方式特别简单

1. 这里准备了一个本地的index.html文件




    
    OC与JS交互
    


    
    点击跳转响应OC方法
    
    点击跳转效应

    

2. JS调用OC

// 加载所有请求数据,以及控制是否加载
// JS 调用 OC --> shouldStartLoadWithRequest
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    
    NSLog(@"scheme = %@", request.URL.scheme); // 标示 我们自己的协议
    NSLog(@"host = %@", request.URL.host); // 方法名
    NSLog(@"pathComponents = %@", request.URL.pathComponents); // 参数
    
    // JS 调用OC 的原理就是 拦截URL
    NSString *scheme = request.URL.scheme;
    if ([scheme isEqualToString:@"lgedu"]) {
        NSArray *array = request.URL.pathComponents;
        if (array.count > 1) {
            NSString *methodName = array[1];
            if ([methodName isEqualToString:@"getSum"]) {
                [self performSelector:NSSelectorFromString(methodName) withObject:array afterDelay:0];
                //...
            }
        }
    }
    
    return YES;
}

JS调用OC就是UIWebViewDelegate的这个代理方法shouldStartLoadWithRequest,其实质就是 拦截URL,解析URL并找到事先约定好的标识,时候判断实现相应的业务逻辑处理。

下面这些都是JS响应的样式,都会回到UIWebViewDelegate的这个方法来

UIWebViewNavigationTypeLinkClicked,        点击
UIWebViewNavigationTypeFormSubmitted,      提交
UIWebViewNavigationTypeBackForward,        返回
UIWebViewNavigationTypeReload,             刷新
UIWebViewNavigationTypeFormResubmitted,    重复提交
UIWebViewNavigationTypeOther               其他

3. OC调用JS

- (nullable NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;

OC调用JS就是实现UIWebView的这个方法stringByEvaluatingJavaScriptFromString,传一个字符串可以是JS里面写的方法名。

文中所有示例demo可以在这里下载
https://github.com/SPIREJ/OCJS

你可能感兴趣的:(OC与JS交互 - 传统交互方式)