iOS收录

iOS-原生与 js 交互

2018-09-10  本文已影响23人  梦蕊dream

最近接到一个需求,在APP 内引入其他系统售票的功能。web 页面展示其他系统的内容,包括模块信息、预下单操作和相关订单信息,然后 js 调起原生的支付系统

1.处理返回交互

在 web 页中进行多次点击后,返回上一个 web 页,而不是整个模块页面返回

解决方案:
1.手写/监听返回按钮
2.在返回按钮点击事件处理

//自定义的返回按钮
- (void)clickBackBtn:(UIButton *)btn
{
    if ([self.webView canGoBack]) {
        [self.webView goBack];
    }else{
        [self.view resignFirstResponder];
        [self.navigationController popViewControllerAnimated:YES];
    }
}

2.获取预下单相关数据

在 web 页操作后,获取到 web 页操作的相关下单支付的信息
解决方案
与后端协调好方法名称,然后拦截该方法名传递的相关数据

#import <JavaScriptCore/JavaScriptCore.h>

- (void)webViewDidFinishLoad:(UIWebView *)webView{
    NSString * title = [webView stringByEvaluatingJavaScriptFromString:@"document.title"];//获取当前页面的title
    JSContext *context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

    //获取json数据
    context[@"startFunction"] = ^() {
        NSArray *data = [JSContext currentArguments];
        for (JSValue *jsVal in data) {
            //将字符串转换成NSDictionary
            NSDictionary *busTicketData = [NSDictionary dictionaryWithJsonString:jsVal.toString];
            NSLog(@"------%@",busTicketData);
        }
    };

    //监测异常-页面返回
    context[@"close_ios"] = ^() {
        [self.view resignFirstResponder];
        [self.navigationController popViewControllerAnimated:YES];
    };
}

上述方法名解释:

上一篇下一篇

猜你喜欢

热点阅读