一、WebView基本用法
1 .通过webView来加载html页面的用法:
//例如:加载assets文件夹下的test.html页面
mWebView.loadUrl("file:///android_asset/test.html")
//例如:加载网页
mWebView.loadUrl("http://www.baidu.com")
//例如:加载assets文件夹下的test.html页面
mWebView.loadUrl("file:///android_asset/test.html")
//例如:加载网页
mWebView.loadUrl("http://www.baidu.com")
注意:一般会在App内部打开网页,否则,会在你手机默认的浏览器上打开。同时,使App的标题显示H5页面的标题。设置WebViewClient:
webview.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {//设置App内部打开网页
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {//设置标题
tv_title.setText(view.getTitle());
}
});
2. WebVIew访问https协议请求(使用ssl加密的url时)。如果不经过处理,页面显示空白。而使用系统自带的浏览器打开时,会弹出确认证书的对话框。需要的处理是重写WebViewClient类的onReceivedSslError方法,如下: @Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
}
二、WebView与H5交互
前提:调用js方法那么就必须让webView支持
WebSettings webSettings = mWebView.getSettings();
//设置为可调用js方法
webSettings.setJavaScriptEnabled(true);
1 Android本地调用HTML页面中的JavaScript方法
WebSettings webSettings = mWebView.getSettings();
//设置为可调用js方法
webSettings.setJavaScriptEnabled(true);
//若调用的js方法没有返回值 do()方法为JS的方法
mWebView.loadUrl("javascript:do()");
//有返回值
mWebView.evaluateJavascript("do(1,2)", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
Log.e(TAG, "onReceiveValue value=" + value);
}
});
2. js调用Android本地Java方法
//若调用的js方法没有返回值 do()方法为JS的方法
mWebView.loadUrl("javascript:do()");
//有返回值
mWebView.evaluateJavascript("do(1,2)", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
Log.e(TAG, "onReceiveValue value=" + value);
}
});
首先,定义一个Java类:
public class JsInteration {
@JavascriptInterface //Android4.2以上可以直接使用@JavascriptInterface注解来声明
public String back() {
return "hello world";
}
}
然后,在js调用Android中的方法
public class JsInteration {
@JavascriptInterface //Android4.2以上可以直接使用@JavascriptInterface注解来声明
public String back() {
return "hello world";
}
}
//第一个参数是 供给js调用的类,第二个参数是js中要用到的调用这个类中的方法的对象,可以随便起
mWebView.addJavascriptInterface(new JsInteration(), "android");
问题:有时候会遇见Js调用android方法无效。解决方法:
//第一个参数是 供给js调用的类,第二个参数是js中要用到的调用这个类中的方法的对象,可以随便起
mWebView.addJavascriptInterface(new JsInteration(), "android");