H5与原生交互原理
#积累/混合开发
iOS
iOS提供UIwebView组件,它是一个可加载网页的对象,它有浏览记录功能,且对加载的网页内容是可编程的,如可以调用JavaScript方法。
- Native调用JavaScript方法
stringByEvaluatingJavaScriptFromString()方法可以执行一段js脚本,并返回执行结果。只可以执行全局对象下的JavaScript方法。 - Javascript调用Native方法
UIWebView有个特性:在UIWebView内发起的所有网络请求,都可以通过delegate函数在Native层得到通知。
可以在UIWebView内发起一个自定义的网络请求,通常是这样的格式:jsbridge://methodName?param1=value1¶m2=value2。Native拦截发现之后,执行相应逻辑。
WKWebview
Native调用JavaScript方法
WKWebView可以主动调用JavaScript方法,并获得函数返回值。JavaScript调用Native方法
在Native层注册WKWebview的原生方法,webview暴露webkit.messageHandlers
到全局变量JavaScript通过。JavaScript通过window.webkit.messageHandlers.OOXX.postMessage()
调用并传值。
1 | //传值例子 |
Android
- Native调用JavaScript方法
webview有个loadUrl()方法,可以调用JavaScript代码。1
webView.loadUrl("javascript:JSBridge.trigger('webviewReady')")
- JavaScript调用Native方法
webview有个addJavascriptInterface()方法,可以往webview注入原生方法。