一、一些常用的方法
1.WebChromeClient
WebChromeClient来处理js交互与互联网业内容,常用到的方法有
-
onJsAlert() 接收网页的alert事件
-
onJsPrompt() 接收网页的Prompt输入框事件
-
onJsConfirm() 接收网页的confirm确认事件
-
onProgressChanged() 页面加载百分比
-
onReceivedIcon() 接收网页的图标
-
onReceivedTitle() 接收网页的标题
2.WebSettings
webview的设置类,能够设置webview的各种详细参数
-
设置是否使用file协议访问网页,常用于访问assets与raw文件夹下面的网页 setAllowFileAccess(boolean allow)
-
设置是否使用webview自带的缩放功能
setBuiltInZoomControls(boolean enabled) -
设置是够支持html5的数据库功能
setDatabaseEnabled(boolean flag)
setDomStorageEnabled(boolean flag); -
设置页面的文字大小
setDefaultFontSize(int size) -
设置是否执行页面的js方法
setJavaScriptEnabled(boolean flag) -
设置返回键的处理,是否使用缓存加载页面
LOAD_DEFAULT(先从cache加载,没有再去网络加载), LOAD_CACHE_ELSE_NETWORK(先从cache加载,没有再去网络加载) LOAD_NO_CACHE(不使用cache) LOAD_CACHE_ONLY(只使用cache)
setCacheMode()
3.WebView
android提供的控件,能够加载网页和html数据。
-
增加一个对象使webview能够让java代码与js交互 addJavascriptInterface(Object object, String name)
-
加载一个网页,能够是网络的网页,也能加载本地的网页,本地的网页使用(file:///assets/)来 加载。也可以调用一个javaScrpit方法
loadUrl(String url) -
加载一段html代码
loadData(String data, String mimeType, String encoding)
loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl) -
刷新当前页面
reload() -
获取当前页面的标题
getTitle() -
判断webview是否能够回到上一步
canGoBack()
goBack()二、Webview的基本使用
由于布局比较简单,这里就不在给出,布局中只有一个VebView控件
public class WebViewActivity extends Activity {
WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web_view);
webView = (WebView)findViewById(R.id.webwiew);
//启用javaScript
webView.getSettings().setJavaScriptEnabled(true);
//全屏显示
webView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.loadUrl("这里是所要加载的网页的url");
//处理url重定向不要抛到系统浏览器
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view,String url){
view.loadUrl(url);
return true;
}
});
}
@Override
public void onBackPressed(){
//如果webwiew能够回退到上一个页面
if (webView.canGoBack()){
webView.goBack();
}
super.onBackPressed();
}
}
复制代码
三、Android中Java与js之间的交互
- 首先在Activity中写一个方法(我这里是javaShow()方法)。方法体上面必须帖@JavascriptInterface标签
- 通过调用addJavascriptInterface(Object object, String name)增加一个Java对象使webview能够让java代码与js交互,object是传给js的Java对象,name是给该对象起的名字。
- js通过window.对象名.方法名()(我这里对象名为demo,java的方法名为javaShow,所以就可通过window.demo调用到javaShow()方法)就可以调用到java中的方法
public class WebViewActivity extends Activity {
WebView mWebView;
//html的内容
String body;
@Override
@JavascriptInterface
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web_view);
mWebView = (WebView) findViewById(R.id.webview);
mWebView.getSettings().setJavaScriptEnabled(true);
//这里js通过window.demo.javaShow()就可以调用到java中的javaShow()方法
body = "<html><head><style>img{width:100%}</style><script type='text/javascript'>function show(){window.demo.javaShow()} </script></head><body>" + html代码(由于篇幅问题这里用html代码几个文字来代替一些html内容) + "</body></html>";
mWebView.addJavascriptInterface(this,"demo");
mWebView.loadDataWithBaseURL(null, body, "text/html", "utf-8", null);
}
@JavascriptInterface
public void javaShow(){
Intent intent = new Intent();
intent.setClass(this,DetailImageActivity.class);
intent.putExtra("image",images);
startActivity(intent);
}
}
复制代码
四、使用WebView需要注意的问题
在android 4.2版本以下的手机有一个问题就是,webview会被JavaScript注入,造成手机出现信息安全的问题,比如下载病毒,发送短信等等。问题就出在addJavascriptInterface方法。JavaScript通过调用这个接口可以直接操作本地的JAVA接口。
google在4.2的版本上面解决了这个问题,解决的方法是在被js调用的方法上面加上一个声明, @JavascriptInterface ,但是4.2版本以下的手机就没有提出官方的解决方法。