UI组件——WebView部分api释义

来源:互联网 发布:java面试问题 编辑:程序博客网 时间:2024/05/01 09:33
  • 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,如有错误,请留言!

原创粉丝点击