自定义CWebView

项目地址:https://github.com/Callanna/CustomView

自定义CWebView 的封装

  • 支持WebView缓存
  • 支持JavaScript
  • 支持手机点击返回键返回
  • 监听网页加载进度
  • 监听wifi网络状态变化自动刷新
  • 网络状况不佳,网络加载错误页面提示等功能
  • 重写destory,清除缓存,清除历史,移除父容器的子控件
  • 获得当前网页标题

ProgressWebView

  • 显示当前加载进度

PullRefreshWebView

  • 支持下拉刷新
  • 注入网络加载失败后'其设置网络'JS接口

Usage

You can create your own progress wheel in xml like this (remeber to add xmlns:wheel="http://schemas.android.com/apk/res-auto"):

 <com.cvlib.web.CWebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
    </com.cvlib.web.CWebView>

in code:

        fWebView = (CWebView) mView.findViewById(R.id.webView);
        //监听网页加载进度
        fWebView.addLoadingStateListener(new CWebView.ILoadingStateListener() {
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                //TODO
            }
            @Override
            public void onPageFinished(WebView view, String url) {
                //TODO
            }
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                //TODO
            }
        });

监听wifi网络状态变化自动刷新

demo1

fWebView.setAutoLoadOnNetStateChanged(true);

获得当前加载网页title


fWebView.getCurrentTitle();

重写destroy 避免直接调用,如果不移除父容器中的其他控件,会出现异常


 fWebView.destroy();
 

支持返回按键返回

demo4
demo4

加载网页出现未知错误

demo2
demo2
  • ProgressWebView

    带有进度条的WebView  
    
    demo3
  • PullRefreshWebView

    封装了一下SwipeRefreshLayout,支持下拉刷新。

     
      fWebView = (PullRefreshWebView) view.findViewById(R.id.webview_recipe);
        //没有连接网络,点击默认错误界面的去设置网络的回调接口
        fWebView.initJsClass(new JsClass.IOpenWifiSettingListener() {
            @Override
            public void openWifiSetting() {
               NetUtils.openSetting(getActivity());
            }
        });
        

WebView 其他用法以及注意事项

  • 支持播放的插件
    
        fWebView.getfWebView().getSettings().setPluginState(WebSettings.PluginState.ON);
          
  • 播放网页视频后,返回或退出时,要清除数据,以免出现背后声音依旧在播放的问题
    
        fWebView.cleanCache(true) 
        
  • 需要设置PC的UserAgent
    
        fWebView.getfWebView().getSettings().setUserAgentString("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36");             
  • 如果支持JS,判断一下系统版本是否在4.2一下

    系统版本在4.2一下, 有WebView因addJavaScriptInterface()引起的安全问题

    这个问题主要是因为会有恶意的js代码注入,尤其是在已经获取root权限的手机上,
    一些恶意程序可能会利用该漏洞安装或者卸载应用.

    关于详细的情况可以参考下面这篇文章:

    Android WebView的Js对象注入漏洞解决方案

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,560评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,743评论 4 61
  • 强者可生,弱者为食; 小A是一只蟑螂,不知己之由来,不知父母者谁,所拥有的就是这间屋子。他游曳在他的领地,屋子里的...
    0524号患者阅读 1,553评论 0 0
  • http://blog.163.com/digoal@126/blog/static/16387704020101...
    驭乐MJ阅读 1,567评论 0 1
  • 晚上睡觉的时候琢磨了下孙悟空。 要是以被压五指山为界限来看孙悟空,就有意思的多。 往后倒腾,他离开了有形的五指山,...
    小兵001阅读 1,666评论 0 1

友情链接更多精彩内容