使用postMessage,如何消除iOS和Android平台之间的差异

通常情况下 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) {
      
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容