UI組件——WebView部分api釋義

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

發佈了54 篇原創文章 · 獲贊 17 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章