1、WebView加载页面
WebView加载html页面时,根据HTML文件所在的位置不同写法也不同:
//加载assets文件夹下的test.html页面
mWebView.loadUrl("file:///android_asset/test.html")
//加载普通网页
mWebView.loadUrl("http://www.baidu.com")
如果只是这样调用mWebView.loadUrl()加载页面的话,那么页面将会在你手机的默认浏览器上打开。那如果想要页面在App内中打开的话,那么就得设置setWebViewClient:
mWebView.setWebViewClient(new WebViewClient());
2、调用HTML页面中的Javascript方法
先让WebView支持Javascript。
//设置为支持js方法
mWebView.getSettings().setJavaScriptEnabled(true);
若调用的js方法没有返回值,则直接可以调用:
//其中do是js中的方法
mWebView.loadUrl("javascript:do()");
若有返回值时我们可以调用:
//sum为js中的方法
mWebView.evaluateJavascript("sum(1,2)", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
Log.e(TAG, "onReceiveValue value=" + value);
}
});
3、Javascript调用Android本地Java方法
在Android4.2以上可需使用@JavascriptInterface注解来声明方法,下面是在一个本地Java方法:
public class JsInteration {
@JavascriptInterface
public String show() {
return "hello world";
}
}
定义完这个方法后再调用mWebView.addJavascriptInterface()方法:
mWebView.addJavascriptInterface(new JsInteration(), "android");
那么在js中怎么来调用呢?
<script type="text/javascript">
function s(){
//调用Java的show()方法
var result =window.android.show();
document.getElementById("p").innerHTML=result;
}
</script>
Ps:Javascript调用的方法运行在一个叫JavaBridge的子线程中,而非Main线程
4、拦截HTML页面中的点击事件
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//判断url拦截事件
if (url.equals("file:///android_asset/test2.html")) {
Log.e(TAG, "shouldOverrideUrlLoading: " + url);
startActivity(new Intent(MainActivity.this,Main2Activity.class));
return true;
} else {
mWebView.loadUrl(url);
return false;
}
}
});