WebView 与 前端交互
WebView 与常用类
WebView
WebView
函数
1 | //方式1. 加载一个网页: |
WebSettings
函数
1 | //访问的页面中要与Javascript交互,则webview必须设置支持Javascript, |
属性
1 | //------------------------------WebView缓存--------------------------------------------------------------------------------- |
WebViewClient
1 |
|
WebChromeClient
1 | public void onProgressChanged(WebView view, int newProgress); |
和Js的交互
JavaScript 调用 Android
通过
WebView # addJavascriptInterface()
进行对象映射- 优点 : 使用简单
缺点 : 存在严重的漏洞问题
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20//定义接口
public class AndroidtoJs extends Object {
// 定义JS需要调用的方法
// 被JS调用的方法必须加入@JavascriptInterface注解
@JavascriptInterface
public void hello(String msg) {
System.out.println("JS调用了Android的hello方法");
}
}
//使用接口
mWebView.addJavascriptInterface(new AndroidtoJs(), "test");
//JavaScript
<script>
function callAndroid(){
// 由于对象映射,所以调用test对象等于调用Android映射的对象
test.hello("js调用了android中的hello方法");
}
</script>
通过
WebViewClient # shouldOverrideUrlLoading ()
方法回调拦截 url1
2
3
4
5
6
7
8
9
10<script>
function callAndroid(){
/*约定的url协议为:js://webview?arg1=111&arg2=222*/
document.location = "js://webview?arg1=111&arg2=222";
}
function returnResult(result){
alert("result is" + result);
}
</script>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
mWebView.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// 根据scheme(协议格式) & authority(协议名)判断(前两个参数)
Uri uri = Uri.parse(url);
if ( uri.getScheme().equals("js")) {
if (uri.getAuthority().equals("webview")) {
System.out.println("js调用了Android的方法");
// 可以在协议上带有参数并传递到Android上
HashMap<String, String> params = new HashMap<>();
Set<String> collection = uri.getQueryParameterNames();
// 回复
mWebView.loadUrl("javascript:returnResult(" + result + ")");
}
return true;
}
return super.shouldOverrideUrlLoading(view, url);
}
});通过
WebChromeClient#onJsAlert/Confirm/Prompt()
方法回调拦截JS对话框alert()
、confirm()
、prompt()
消息
Android 调用 JavaScript
通过
WebView # loadUrl()
1
2mWebView.loadUrl("javascript:callJS()");
//只能通过WebChromeClient类的函数进行信息回调通过
WebView # evaluateJavascript()
1
2
3
4
5
6
7mWebView.evaluateJavascript("javascript:callJS()",
new ValueCallback<String>() {
public void onReceiveValue(String value) {
//此处为 js 返回的结果
}
});