WebView初探使用总结
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);
有两种调用方式:
1.如果Js方法没有返回值
//其中do是Js中的方法 mWebView.loadUrl("javascript:do()");
2.不管Js方法有无返回值
//sum为Js中的方法 mWebView.evaluateJavascript("sum(1,2)", new ValueCallback() { @Override public void onReceiveValue(String value) { Log.e(TAG, "onReceiveValue value=" + value); } });
3、Javascript调用Android本地的Java方法
在Android 4.2 以后需使用@JavascriptInterface注解来声明方法,下面是一个本地Java方法:
public class JsInteration {
@JavascriptInterface public String show() { return "hello world"; } }
定义完这个类后再注册到WebView里:
mWebView.addJavascriptInterface(new JsInteration(), "android");
那么在Js中怎么来调用呢?
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)); // true代表app自己处理 return true; } else { mWebView.loadUrl(url); // false代表webview自己处理 return false; } } });