通常情況下 Android使用時(shí)候是 window.xxx.postMessage
而iOS接收時(shí)使用的是window.webkit.messageHandlers.xxx.postMessage
如下
if(isAndroid) {
// 給Android傳遞參數(shù)需要用 window.Android.注冊(cè)的方法名({body:傳輸?shù)臄?shù)據(jù)} 來(lái)給native發(fā)送消息
window.xxx.postMessage({"key":"parameter"});
}
if(isiOS) {
// 給iOS傳遞參數(shù)需要用 window.webkit.messageHandlers.注冊(cè)的方法名.postMessage({body:傳輸?shù)臄?shù)據(jù)} 來(lái)給native發(fā)送消息
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端使用時(shí)
- (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) {
}