LibWebview

LibWebview Github Maven Central

1. 功能简介

基于腾讯X5内核的封装的内置浏览器,支持JSBridge等基础功能

2. 组件信息

引用仓库

引用仓库可以参考 组件使用 中添加依赖的部分

组件使用

implementation 'com.bihe0832.android:lib-webview:+'

3. 组件功能

3.1. WebViewHelper

  • Webview 及 X5 内核的初始化

3.2. BaseWebView

  • 基于X5 定制的Webview

  • 支持防 webview 远程代码执行漏洞

  • 添加基础的HTML支持:

      //设置WebView属性,能够执行Javascript脚本
      webSetting.setJavaScriptEnabled(true);
      webSetting.setAllowFileAccess(true);
      webSetting.setSupportMultipleWindows(false);
      webSetting.setPluginState(WebSettings.PluginState.ON_DEMAND);
      webSetting.setUseWideViewPort(true);  //将图片调整到适合webview的大小
      webSetting.setLoadWithOverviewMode(true); // 缩放至屏幕的大小
      //支持HTTP和HTTPS混合模式
      if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {
          //由于X5没有定义对应的常量,因此直接使用实际值,对应官方webkit的WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
          webSetting.setMixedContentMode(0);
      }
      //支持缩放,默认为true。是下面那个的前提。
      webSetting.setSupportZoom(true);
      //设置内置的缩放控件。
      webSetting.setBuiltInZoomControls(true);
    
      //若上面是false,则该WebView不可缩放,这个不管设置什么都不能缩放。
      webSetting.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); //支持内容重新布局
      webSetting.supportMultipleWindows();  //多窗口
      webSetting.setNeedInitialFocus(true); //当webview调用requestFocus时为webview设置节点
      webSetting.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
      webSetting.setLoadsImagesAutomatically(true);  //支持自动加载图片
      webSetting.setDefaultTextEncodingName("utf-8");//设置编码格式
    
  • 自定义缓存支持

      //设置缓存类型
      webSetting.setCacheMode(WebSettings.LOAD_DEFAULT);
      //设置缓存位置
      String cacheDirPath = this.getContext().getApplicationContext().getFilesDir().getAbsolutePath() + APP_CACAHE_DIRNAME;
      //JYLog.d("cacheDirPath=" + cacheDirPath);
      //设置数据库缓存路径
      webSetting.setDatabasePath(cacheDirPath);
      //设置  Application Caches 缓存目录
      webSetting.setAppCachePath(cacheDirPath);
      //开启 Application Caches 功能
      webSetting.setAppCacheEnabled(true);
      // 开启 DOM storage API 功能
      webSetting.setDomStorageEnabled(true);
      //开启 database storage API 功能
      webSetting.setDatabaseEnabled(true);
      webSetting.setAppCacheMaxSize(Long.MAX_VALUE);
    
  • X5 扩展支持

      Bundle data = new Bundle();
      // true表示标准全屏,竖屏Web播放横屏视频不转为横屏,false表示X5全屏,此时竖屏Web播放横屏视频会转为横屏;不设置默认false,
      data.putBoolean("standardFullScreen", false);
      // false:关闭小窗;true:开启小窗;不设置默认true,
      data.putBoolean("supportLiteWnd", false);
      // 1:以页面内开始播放,2:以全屏开始播放;不设置默认:1
      data.putInt("DefaultVideoScreen", 2);
      getX5WebViewExtension().invokeMiscMethod("setVideoParams", data);
      //设置WebView是否通过手势触发播放媒体,默认是true,需要手势触发。
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
          //设置WebView是否通过手势触发播放媒体,默认是true,需要手势触发。
          getSettings().setMediaPlaybackRequiresUserGesture(true);
      }
      //接口禁止(直接或反射)调用,避免视频画面无法显示
      setDrawingCacheEnabled(true);
    

3.3. JSbridge

JSbridge 相关的实现方案,可以点击JSBridge参考文档了解

  • BaseJsBridgeProxy

    从JS调用转为原生接口

  • JsBridge

    接原生处理结果,回调JS

  • JsResult

    错误码

Copyright © zixie all right reserved,powered by Gitbook最后修改: 2022-02-10 15:07:19

results matching ""

    No results matching ""