通常情况下 Android使用时候是 window.xxx.postMessage
而iOS接收时使用的是window.webkit.messageHandlers.xxx.postMessage
如下
if(isAndroid) {
// 给Android传递参数需要用 window.Android.注册的方法名({body:传输的数据} 来给native发送消息
window.xxx.postMessage({"key":"parameter"});
}
if(isiOS) {
// 给iOS传递参数需要用 window.webkit.messageHandlers.注册的方法名.postMessage({body:传输的数据} 来给native发送消息
window.webkit.messageHandlers.xxx.postMessage({"key":"parameter"});
}
将iOS 端消除差异与Android相同
window.%@ = webkit.messageHandlers.%@;
将webkit.messageHandlers消除
NSString* wrapperSource = [NSString
stringWithFormat:@"window.%@ = webkit.messageHandlers.%@;", channelName, channelName];
WKUserScript* wrapperScript =
[[WKUserScript alloc] initWithSource:wrapperSource
injectionTime:WKUserScriptInjectionTimeAtDocumentStart
forMainFrameOnly:NO];
[userController addUserScript:wrapperScript];
完成
这样iOS端使用时
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {
if ([message.name isEqualToString:@"xxx"]) {
NSString *body = message.body;
}
}
Android端使用
webView.addJavascriptInterface(this,"xxx");
public void postMessage(String jsonStr) {
}
网友评论