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