Android WebView 与 H5 交互的一些总结

devtools/2024/10/18 16:53:52/
        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() {@Overridepublic 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.ppmy.cn/devtools/124107.html

相关文章

Cursor AI编辑器:开发效率提升利器

作为一名大模型算法工程师&#xff0c;最近我和朋友使用Cursor AI编辑器配合v0.dev成功开发了一个网站项目&#xff08;llamafactory.cn&#xff09;。这次开发经历让我体会到正确的工具选择对开发效率的巨大影响。 项目背景 在开始详细介绍之前&#xff0c;我想简单介绍一下…

STM32 实现 TCP 服务器与多个设备通信

目录 一、引言 二、硬件准备 三、软件准备 四、LWIP 协议栈的配置与初始化 五、创建 TCP 服务器 1.创建 TCP 控制块 2.绑定端口 3. 进入监听状态 4.设置接收回调函数 六、处理多个客户端连接 七、数据处理与通信管理 八、错误处理与资源管理 九、总结 一、引…

《C++编程新探索:实现高效视频拼接算法》

在当今数字化时代&#xff0c;视频内容的创作和处理变得越来越重要。视频拼接作为一种常见的视频处理技术&#xff0c;能够将多个视频片段组合成一个连续的视频&#xff0c;为视频创作者和用户带来了更多的可能性。本文将探讨如何在 C中实现高效的视频拼接算法&#xff0c;为开…

Redis 数据类型list(列表)

目录 1 基本特性 2 主要操作命令 2.1 LPUSH key value [value ...] 2.2 RPUSH key value [value ...] 2.3 LRANGE key start stop 2.4 LINDEX key index 2.5 LLEN key 2.6 LPOP key 2.7 RPOP key 2.8 LTRIM key start stop 2.9 BLPOP key [key ...] timeout 2.10 B…

Spring Boot洗衣店订单系统:简化您的业务流程

1系统概述 1.1 研究背景 如今互联网高速发展&#xff0c;网络遍布全球&#xff0c;通过互联网发布的消息能快而方便的传播到世界每个角落&#xff0c;并且互联网上能传播的信息也很广&#xff0c;比如文字、图片、声音、视频等。从而&#xff0c;这种种好处使得互联网成了信息传…

【NIO基础】NIO(非阻塞 I/O)和 IO(传统 I/O)的区别,以及 NIO 的三大组件详解

目录 1、NIO 2、NIO 和 IO 的区别 1. 阻塞 vs 非阻塞 2. 一个线程 vs 多个连接 3. 面向流 vs 面向缓冲 4. 多路复用 3、Channel & Buffer (1&#xff09;Channel&#xff1a;双向通道 (2&#xff09;Buffer&#xff1a;缓冲区 (3&#xff09;ByteBuffer&#xff…

彩族相机内存卡恢复多种攻略:告别数据丢失

在数字时代&#xff0c;相机内存卡作为我们存储珍贵照片和视频的重要媒介&#xff0c;其数据安全性显得尤为重要。然而&#xff0c;意外删除、错误格式化、存储卡损坏等情况时有发生&#xff0c;导致数据丢失&#xff0c;给用户带来不小的困扰。本文将详细介绍彩族相机内存卡数…

新电脑 Windows 系统初始配置

文章目录 前言1 前置配置2 安装软件2.1 通讯工具2.2 后端开发工具2.3 硬件开发工具2.4 前端开发工具2.4 其它工具 3 Windows 11 优化4 写在最后 前言 分区&#xff08;个人习惯&#xff09;&#xff1a;1TB SSD 分为 2 个分区&#xff0c;一个 256GB 分区为系统盘&#xff0c;剩…