美文网首页
自定义CWebView

自定义CWebView

作者: Calllanna | 来源:发表于2017-06-18 23:00 被阅读57次

项目地址: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();
 

支持返回按键返回

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对象注入漏洞解决方案

    相关文章

    • 自定义CWebView

      项目地址:https://github.com/Callanna/CustomView 自定义CWebView 的...

    • Dialog

      安卓dialog的使用+如何自定义dialog自定义Dialog自定义Dialog 自定义

    • django的自定义filter和自定义simple_tag

      django的自定义filter和自定义simple_tag 自定义filter: 自定义filter: 简单示例...

    • 自定义tabbarController

      要自定义tabBarController,就要自定义tabBar.要自定义tabBar就要自定义item.所以,咱...

    • 第三方

      ZYSideSlipFilter 侧边栏条件筛选器,支持自定义事件,自定义筛选栏目,自定义所有。。。样式完全自定义...

    • Android 高德地图 自定义Location小蓝点

      设置自定义定位蓝点 自定义Location小蓝点,自定义功能

    • vue 有自定义指令

      vue 的自定义指令,分为全局自定义指令和局部自定义指令,局部自定义指令等价于局部组件。 自定义指令可以对DOM进...

    • Android相关知识点博客记录

      自定义属性 Android自定义View(二、深入解析自定义属性) Android中XML的命名空间、自定义属性 ...

    • CocoaLumberjack源码分析

      1.使用 自定义custom context,自定义flag 自定义日志的格式 自定义日志级别,取消DDLog实现...

    • Android View(转)

      自定义View的原理自定义View基础 - 最易懂的自定义View原理系列自定义View Measure过程 - ...

    网友评论

        本文标题:自定义CWebView

        本文链接:https://www.haomeiwen.com/subject/iuvwqxtx.html