当前位置: 首页 > article >正文

Android WebView 与 H5 交互的一些总结

        Android 中,webview 绝对是使用最频繁的一个组件,涉及到很多的应用场景。如:新闻阅读、加载前端 H5 页面、与合作方的对接、加载本地静态资源等等。以下是我这几年在使用 webview 时的一些总结。
  • webView 的加载

webview 加载页面的方式主要有俩种,一种是加载HTTP || HTTPS 的H5 链接,一种是加载assets中大的本地HTML。

webView.loadUrl("https");//加载一个链接
webView.loadUrl("file:///android_asset/***.html");//加载静态文件
  • webView 设置 HEAD

有时候,为了一些安全考虑,会在加载 webview 时添加 head

Map<String, String> webViewHead = new HashMap<>();
webViewHead.put("Referer", HOST);
webView.loadUrl(url, webViewHead);
  • webView 设置 userAgent

同样,设置 userAgent 也是一种与外部 H5 交互时常用的一种安全方面的配置,一般我会先把想要设置的新 agent放在原来的基础上

String ua = webView.getSettings().getUserAgentString();
webView.getSettings().setUserAgentString(ua + webAgent);
  • webView 设置H5 调用原生时的标识

在与 H5 交互时,会涉及到 H5 与原生互相调用方法的情况,一般默认情况下,H5 会使用 android.去调用原生提供的方法,为了隐私和安全考虑,我们有时候会约定一个别的参数

webView.addJavascriptInterface(new WebAppInterface(),"约定好的标识");
  • webView 设置文件下载

如果H5 中有下载文件的一些操作,如果没有特别的要求,一般我们只需要简单配置就好

//webView 文件下载。直接跳转到外部浏览器进行下载
webView.setDownloadListener(new DownloadListener() {
   @Override
   public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
                downloadByBrowser(url);
   }
});

    private void downloadByBrowser(String url) {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.addCategory(Intent.CATEGORY_BROWSABLE);
        intent.setData(Uri.parse(url));
        startActivity(intent);
    }
  • 其他一些细节

  1. 涉及到拍照,录像可能会需要原生对WebChromeClient进行一些特殊的处理这些根据实际情况查找资料并完善,没有一个统一的配置。需要注意的存储的权限,位置,回调。
  2. 我们会在等待加载的过程中配置过渡动画,这些在 WebViewClient中进行配置,同时可以配置一下证书问题,防止某些网页无法正常访问。
  3. 特殊情况下,可能会要求手机端网页使用PC 版效果,这个可以通过设置setUserAgentString来实现。
  4. 加载缓慢,卡顿等可以通过开启硬件加速来避免。
  5. 腾讯封装的 webview有利有弊,你得能接受你的 App 增加几十 M 的缓存。

http://www.kler.cn/news/342349.html

相关文章:

  • 快速解决urllib3.exceptions.MaxRetryError: HTTPSConnectionPool
  • 【部署篇】Redis-01介绍‌
  • 如何应对动态图片大小变化?Python解决网页图片截图难题
  • Spring Boot项目使用多线程执行定时任务
  • Excel多级结构转成树结构形式
  • 基于vue的酒店预订管理系统(源码+定制+开发)
  • 苹果秋季盛典:iPhone 16系列引领未来科技潮流
  • 数据库——表格之间的关系(表格之间的连接和处理)
  • 数据仓库!企业决策的智慧引擎
  • hadoop入门
  • 陪护小程序|护理陪护系统|陪护小程序成品
  • Spring Boot洗衣店订单系统:提升运营效率
  • 基于IMX6UL的EPIT的定时器实验
  • byte[]/InputStream/MultipartFile之间进行转换
  • Redis 高可用方案
  • 《Electron 基础知识》设置 Vue 中引用的文件路径别名
  • 便民医疗服务小程序后端springboot 服务 vue3 开发的后端 系统设计与实现
  • springmvc直接访问 上下文路径 302 后路径更改并跳转源码解析
  • 【系统架构设计师】案例专题三:数据库系统考点梳理
  • 图像分割恢复方法