- destroy()
销毁当前WebView,WebView有潜在的内存泄漏问题,当不需要的时候,最好销毁掉,避免内存泄漏
@Override
protected void onDestroy() {
super.onDestroy();
if (mMyWebView!=null) {
ViewGroup rootView = (ViewGroup) mMyWebView.getRootView();
rootView.removeAllViews();//ViewGroup中的方法
mMyWebView.destroy();//销毁WebView
}
}
- loadUrl(String str)
str可以是Http/Https协议的URL,也可以是js的代码
webView.loadUrl("https://www.google.com");url可以是网络连接,或者本地或者SD卡的地址,如:webView.loadUrl("file:///android_asset/demo.html");
webView.loadUrl("content://com.android.htmlfileprovider/sdcard/demo.html");
亦或者是js代码:执行此代码无法获取js的返回值
webView.loadUrl("javascript:methodName(parameterValues)")
- loadData(String data,String mimeType,String encoding)
这个方法用起来各种问题,首先data中出现中文的时候,容易出现乱码问题,其次在data中有’#’, ‘%’, ‘\’, ‘?’ 的时候也会出现很多问题,看源码就知道了,所有不建议使用
- loadDataWithBaseURL(String baseUrl, String data,String mimeType, String encoding, String historyUrl )
参数解释:基准url,当数据里面的url是绝对路径时,baseUrl自动不拼接,当数据中的url是相对路径时,baseUrl自动拼接为绝对路径
data:数据
mimeType:MIME类型
encoding:编码格式
historyUrl:没用过,都是写的null;
String baseURL = "http://api.test.qyuedai.com/";//我公司的测试地址
String data = "loadData;"+"测试中文是否乱码;"+"绝对地址加载图片:"+
"<img src = 'http://7xrgp0.com1.z0.glb.clouddn.com/CMB-anroid-tx.png'>"+
"相对地址加载:没有试验条件";
mMyWebView.loadDataWithBaseURL(baseURL,data,"text/html","UTF-8",null);
- evaluateJavascript(String script,ValueCallback resultCallback)
script:将要执行的js语句
resultCallback:执行结果的回调
此方法异步执行js语句,并返回执行结果,需要添加setJavaScriptEnabled(true)条件,并且该方法在4.4(api 19)以后才加入。此方法和loadUrl()是与js交互的重要途径。
- stopLoading()
停止加载 - reload()
- canGoBack()
能否回退 - goBack()
回退 - canGoForward()
能否向前
简单的略过。。。。。。只看重点!!!!!!
- setWebViewClient(WebViewClient client)
接受各种通知和请求的 WebViewClient
- setDownloadListener(DownloadListener listener)
下载监听,DownloadListener 只有一个开始下载的回调,不明白为什么只加一个回调
- setWebChromeClient(WebChromeClient client)
处理js对话框,图标,标题,加载进度等等
- addJavascriptInterface(Object object, String name)
这个方法真的是让WebView变得十分强大,同时也变得臭名昭著,
意思是添加js接口,可以让js调用Android里的方法。
带来的问题:webView 在api 4.0 到4.2 之间增加了 searchBoxJavaBridge_ 方法,导致webView 存在安全漏洞。
解决方法是:在4.2 以前的版本不用 addJavascriptInterface 接口,并且在4.0-4.2之间移除searchBoxJavaBridge方法;代码本人也是Google来的,只是稍加修改。。。。
//api是14-17时,移除searchBoxJavaBridge_这个接口,避免产生安全问题
private void removeSearchBoxJavaBridgeInterface() {
if (Build.VERSION.SDK_INT >= 14 && Build.VERSION.SDK_INT < 17) {
removeJavascriptInterface("searchBoxJavaBridge_");
}
}
//只有当api 大于17的时候才允许使用addJavascriptInterface方法
@Override
public void addJavascriptInterface(Object object, String name) {
if (Build.VERSION.SDK_INT >= 17) {
super.addJavascriptInterface(object, name);
}
}
- getSettings()
获取WebSettings 类,来设置webview
以上只是个人感觉比较重要的api,如有错误,请留言!