h5与原生交互

app混合开发,嵌入h5页面,应该是现在比较流行的一种开发方式。优点:开发速度快、app不用频繁提交审核、发版;缺点:h5的交互毕竟不如原生,开发时的沟通成本较大。

开发的过程中,会遇到一些h5或原生自身解决不了的交互,举例:在h5页面点击按钮弹出原生做的弹窗。
这个时候就需要通过h5调用原生的方法展示弹窗,反之一样。

本文h5基于的原生环境:
  • ios: WKWebView的WKScriptMessageHandler协议
  • androis:WebView的addJavascriptInterface()方法
原理
  • js调用ios/android定义的方法
  • ios/android调用js定义的方法
调用示例
  • js调用ios的方法
window.webkit.messageHandlers.show.postMessage("显示弹窗")

其中 show 为ios定义的方法名,"显示弹窗" 是传过去的参数。
注意:参数不能为空!不然进去不方法。
也就是不可以postMessage()这样调用,没参数可以postMessage(null)

  • js调用android的方法
window.supportJs.show("显示弹窗");

其中 supportJs 是android定义的js对象, show为方法名,"显示弹窗" 是传过去的参数。
注意:定义的方法不接收参数的话,不能传参!不然进去不方法。
也就是不定义参数的话,show()这样调用

  • 原生调用js方法
    首先js自定义一个在window下的方法
window.Hybrid.show=function(data){
    alert(data)
}

然后就可以在原生中调用方法名为Hybrid.show的js方法了,js接收一个参数,也可以根据实际业务定义多个参数。

重点:由于语言的不同(js、java、oc),参数一定要提前约定好,一定要注意参数的格式、类型。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。