Android应用开发中应用开发中WebView的常用方法笔记整理的常用方法笔记整理
基本使用基本使用
使用WebView通常是需要网络的,所以需要加上访问网络的权限
<uses-permission android:name="android.permission.INTERNET" />
1.加载某个加载某个url的方法的方法
WebView.loadUrl("http://www.baidu.com");
需要注意的是不要省略前面的http://,省略的话,某些ROM中的WebView会加载失败
2.加载加载assets中的中的HTML
WebView.loadUrl("file:///android_asset/xxx.html")
3.加载一段加载一段javascript
WebView.loadUrl("javascript:" + ${js_code})
4.为为js提供本地方法提供本地方法
如下,提供一个showToast的方法给javascript
private static class JavaJs {
private Context context;
JavaJs(Context context) {
this.context = context;
}
@JavascriptInterface
public void showToast(String str) {
Toast.makeText(context, str, Toast.LENGTH_LONG).show();
}
}
webView.addJavascriptInterface(new JavaJs(this), "JavaJs");
<script type="text/javascript">
JavaJs.showToast("toast from js");
</script>
注意:
提供给javascript的方法必需是public的,否则js无法访问
提供给javascript的方法将会在WebView管理的线程中执行,因此要保证该方法的线程安全性.(Toast是支持在非UI线程中show()
的,所以上面的showToast方法是没问题的)
提供给javascript的方法一定要加上 @JavascriptInterface
在Android 4.2,Api 17之前,javascript可以通过反射java对象,来执行一些危险操作.比如反射取到Runtime,然后执行shell命令
虽然@JavascriptInterface是在Api 17加上的,但是Api 17之前,我们依然建议将提供给javascript的方法加上该annotation.(JSR-
175规定,运行时annotation缺失,则直接忽略,而不会抛出ClassNotFoundException)
针对Android 4.2以前的设备,我们建议不要通过addJavascriptInterface向javascript提供方法,并且通过
removeJavascriptInterface(“searchBoxJavaBridge_”)来移除WebView自己添加的java对象.
5.页面跳转页面跳转
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (Uri.parse(url).getHost().equals("www.xxx.com")) {
// 自己的页面,直接使用WebView加载
return false;
}
// 别的公司的页面,使用浏览器打开
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
});