小伙伴们在使用安卓原生webview时经常能碰到js调用安卓手机相机、相册或录音等功能,前端小姐姐写好了代码功能,在IOS手机测试没有问题,一到安卓手机里功能怎么就失效了呢,安卓程序员肯定以为自己代码哪里配置的有问题,一顿调试,最后发现还是不行,于是乎各种百度谷歌,最后发现原来是webview自己的问题(顺便吐槽下,为什么webview这个常用的控件,谷歌公司就不能优化下呢,坑太多了!),好了废话不多说,进入正文。
先来说说什么是JS交互:
说的通俗一点就是前端一些调用不了原生代码的功能,或者在一些复杂页面和混排页面上,原生没有网页来得快,所以在实际项目中,很多情况下都是原生页面掺杂着webView 加载js的网页的,这就涉及到两者之间的交互以及传值问题。
Android调用JS方法:
- 通过WebView的loadUrl()调用(API小于等于18使用)
- 通过WebView的evaluateJavascript()调用(API大于18使用)
JS调用Android方法:
- 通过WebView的addJavascriptInterface()
- 通过WebViewClient的shouldOverrideUrlLoading()回调拦截url
- 通过 WebChromeClient 的onJsAlert()、onJsConfirm()、onJsPrompt()方法回调拦截JS对话框alert()、confirm()、prompt()方法
- 由于方法二和方法三使用方法复杂,大多数同学使