WebViewJavascriptBridgeDemoToApp

项目中 WebViewJavascriptBridge 的实际使用

首先感谢WebViewJavascriptBridge的作者,大家可以去看下源码,顺手给个Star。

最近项目中要求 HTML , native 互相调用,本来对这个不是很懂,以前做这方面需求的时候是通过:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
}

拦截reuqest,判断关键字来完成需求。这种方法太low了而且并不灵活,就去网上查了一些资料,自己研究了一下写的一个小Demo,希望可以帮到需要的人。

##使用介绍: actionNames App支持的方法名称 此处需要与前端协商 定好每个方法的名称

/**
 *  处理URL
 *
 *  @param theURL
 *
 *  @return 是否成功处理
 */
- (BOOL)handleDictionAry:(NSDictionary *)dictionary callback:(HybridCallbackBlock)callbackBlock;

/**
 *  可以接受的actionNames列表
 *
 * 每个Item为NSString类型
 */
- (NSArray *)actionNames;

注册方法 接受回调

- (BOOL)registerHybridUrlHanlder:(id<HybridUrlHanlder>)handler andBridge:(WebViewJavascriptBridge *)bridge {
    NSAssert([handler actionNames], @"action can not be nil");
    if (![handler actionNames]) {
        return NO;
    }
    for (NSString *action in [handler actionNames]) {
        [self.handlersDict setObject:handler forKey:action];

        [bridge registerHandler : action handler :^ (id data, WVJBResponseCallback responseCallback) {
            
            id<HybridUrlHanlder> handler = [self.handlersDict objectForKey:[NSString stringWithFormat:@"%@",data[@"actionName"]]];

            if (handler) {
                [handler handleDictionAry:data callback:^(BOOL isSucc, NSDictionary *nativeResponseData) {
                    if (isSucc) {
                        responseCallback(@{@"data":nativeResponseData}); //需要返回给HTML 部分参数 例子:pay 支付结果
                        return ;
                    }
                }];
            }
        }];
    }

    return YES;
}

Demo地址

推荐文章:

Hybrid APP架构设计思路

浅谈Hybrid技术的设计与实现