- 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,如有錯誤,請留言!