移动开发冷知识程序员

使用postMessage,如何消除iOS和Android平台之

2019-12-17  本文已影响0人  月球在此

通常情况下 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) {
      
    }
上一篇下一篇

猜你喜欢

热点阅读