三方库选择
方案比较通用,对UIWebView也支持。
需要改用DWKWebView,对原有代码略有侵入。
目前方案
直接使用WKWebView原生接口
JS调用Native
[config.userContentController addScriptMessageHandler:[WKScriptMessageHandlerWrapper wrapper:self] name:JS_HANDLER_UrlRouter];
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {
    NSLog(@"Recv Js call : name =  %@", message.name);
    if ([message.name isEqualToString:JS_HANDLER_UrlRouter]) {
        [self handleUrlRouterMessage:message.body];
    } else if ([message.name isEqualToString:JS_HANDLER_ShareService]) {
        [self handleShareServiceMessage:message.body];
    }
}
- Native调用JS
 
[self.webView evaluateJavaScript:@"window.JSHandler()" completionHandler:^(id _Nullable obj, NSError * _Nullable error) {
    if (obj) {
        NSLog(@"receive js response %@", obj);
    }
}];
JS调用Native不支持返回值。
接口调用不支持回调:JS和Native侧都增加个Callback队列,根据CallbackId执行对应的回调函数。