h5 hybrid方案

2019/1/19 posted in  移动开发

三方库选择

方案比较通用,对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执行对应的回调函数。