WebView是Android与JS之间交互桥梁,我们是通过WebView来实现他们的相互调用。
首先初始化WebView的时候要添加对JavaScript的支持,
WebView.getSettings().setJavaScriptEnabled(true);启用对Js的支持。
Android调用JS代码的方法有2种:
1. 通过WebView的loadUrl()
2. 通过WebView的evaluateJavascript()
loadUrl和evaluateJavascript的区别
loadUrl:
使用起来方便简洁。
但是他是在没有返回的情况下使用。
效率比较低,获取返回值的时候很麻烦。
并且调用的时候会刷新WebView
evaluateJavascript:
效率比loadUrl ()高很多
虽然效率高但是只支持Android4.4以上
在获取返回值时候很方便
调用时候不刷新WebView
js跟Android交互首先要给Android添加,一个JavascriptInterface注解,
然后给WebView绑定你的JavascriptInterface调用addJavaScripInterface,这个方法中有两个参数,第一个需要传一个自定义类的对象,第二个参数是别名,js通过这个别名来调用java中的函数.
对于JS调用Android代码的方法有3种:
1. 通过WebView的addJavascriptInterface()进行对象映射
2. 通过 WebViewClient 的shouldOverrideUrlLoading ()方法回调拦截 url
3. 通过 WebChromeClient 的onJsAlert()、onJsConfirm()、onJsPrompt()方法回调拦截JS对话框alert()、confirm()、prompt() 消息
三种区别
1)addJavascriptInterface ()使用起来方便简洁,但是再Android低版本下有问题,用于Android4.2以上
2)shouldOverrideUrlLoading ()使用起来没有漏洞,但是使用起来比较负责,主要用于不需要返回值的情况
3)onJsAlert()、onJsConfirm()、onJsPrompt()拦截JS中的对话框alert() / confirm() / prompt()
和第二种方式一样,没有漏洞,而且也复杂,并且需要进行协议的约束。
![](https://img.haomeiwen.com/i10185552/ed9a2ae2773f55e9.png)
网友评论