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接收一个参数,也可以根据实际业务定义多个参数。