具体也可见个人简书(图文说明更加详细):https://www.jianshu.com/p/f7a1cbafae57
Android与JS通过WebView互相调用方法,实际上是:
1、Android去调用JS的代码
2、JS去调用Android的代码
二者沟通的桥梁是WebView
-
通过WebView的loadUrl()
-
通过WebView的evaluateJavascript()
-
通过WebView的addJavascriptInterface()进行对象映射
-
通过 WebViewClient 的shouldOverrideUrlLoading ()方法回调拦截 url
-
通过 WebChromeClient 的onJsAlert()、onJsConfirm()、onJsPrompt()方法回调拦截JS对话框alert()、confirm()、prompt() 消息
方式1:通过WebView的loadUrl() 将需要调用的JS代码以.html格式放到src/main/assets文件夹里
在Android里通过WebView设置调用JS代码 ,特别注意:JS代码调用一定要在 onPageFinished() 回调之后才能调用,否则不会调用。
Android 4.4 后才可使用
定义一个与JS对象映射关系的Android类:AndroidJsMapping
将需要调用的JS代码以.html格式放到src/main/assets文件夹里,注意图中test变量,需要在android代码中定义
在Android里通过WebView设置Android类与JS代码的映射
2、通过 WebViewClient 的方法shouldOverrideUrlLoading ()回调拦截 url,Android通过 WebViewClient 的回调方法shouldOverrideUrlLoading ()拦截 url,解析该 url 的协议,如果检测到是预先约定好的协议,就调用相应方法
在JS约定所需要的Url协议
在Android通过WebViewClient复写shouldOverrideUrlLoading ()
3、通过 WebChromeClient 的onJsAlert()、onJsConfirm()、onJsPrompt()方法回调拦截JS对话框alert()、confirm()、prompt() 消息,Android通过 WebChromeClient 的onJsAlert()、onJsConfirm()、onJsPrompt()方法回调分别拦截JS对话框,得到他们的消息内容,然后解析即可。常用的拦截是:拦截 JS的输入框(即prompt()方法)
加载JS代码
在Android通过WebChromeClient复写onJsPrompt()