android webview常见内容

news/2024/11/15 16:47:28/

WebView 是 Android 系统中用于展示网页内容的一个组件。

Android 4.4 之前, 使用 WebKit 渲染引擎,之后使用了 Chromium 的内核

url 加载流程

首先,通过loadUrl()方法或者loadData()等方法来触发加载。当调用这些方法后,WebView 会向服务器发送请求(如果是网络资源),服务器返回网页数据,包括 HTML 文档等或本地 js包数据。然后 WebView 对这些数据进行解析,依次处理 HTML 标签构建 DOM 树,加载和解析 CSS 样式,执行 JavaScript 代码,最终将网页内容渲染显示出来。

安全设置

JavaScript 注入攻击

  • 可以对网页的请求进行拦截,通过shouldOverrideUrlLoading方法检查 URL 是否安全,避免恶意跳转。如果 URL 不符合要求,可以返回true来阻止 WebView 进行默认的加载行为。
  • 通过WebSettingssetJavaScriptEnabled()谨慎开启 JavaScript 功能,只在必要的场景下启用

性能优化

提高加载速度

  • 预加载 WebView,让 WebView 提前初始化并加载部分内容。
  • 启用缓存,通过WebSettingssetCacheMode()设置合适的缓存模式,例如LOAD_CACHE_ELSE_NETWORK
  • 对 HTML、CSS 和 JavaScript 进行优化,比如压缩资源文件、减少重定向等。

内存泄漏

  • 同时,对于长时间运行的 WebView,要合理管理其生命周期,避免不必要的资源占用。
  • 当 Activity 销毁时,如果 WebView 没有被正确处理,它可能仍然占用内存。为避免内存泄漏,在 Activity 的onDestroy方法中,先移除 JavaScript 接口,再调用destroy()方法来销毁 WebView。

与 JavaScript 交互相关

如何在 Android 的 WebView 中实现与 JavaScript 的交互?

答案首先在WebViewWebSettings中通过setJavaScriptEnabled(true)开启 JavaScript 支持。然后可以通过addJavascriptInterface()方法将一个 Java 对象暴露给 JavaScript,使得 JavaScript 可以调用 Java 方法。同时,也可以从 Java 代码中通过loadUrl()(执行 JavaScript 语句)或者evaluateJavascript(在 Android 4.4+,返回结果更方便)方法来调用 JavaScript 函数。

在 WebView 与 JavaScript 交互过程中,有哪些注意事项?

答案:一是要注意安全问题,因为将 Java 对象暴露给 JavaScript 可能会导致安全漏洞,如前面提到的 JavaScript 注入攻击,所以暴露的方法要谨慎设计,避免包含敏感信息或危险操作。二是要注意线程问题,因为 JavaScript 在 WebView 的 UI 线程中执行,所以在 Java 方法与 JavaScript 交互时,要确保不会阻塞 UI 线程,否则会导致应用卡顿。

常用API

启用 JavaScript:

WebView webView = findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);

通过设置viewport来调整网页的缩放和布局

WebView webView = findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();
String metaViewport = "<meta name=\"viewport\" content=\"width=device - width, initial - scale=1.0\">";
webView.loadDataWithBaseURL(null, metaViewport + "你的网页内容", "text/html", "UTF - 8", null);

 设置文本缩放比例

webSettings.setTextZoom(100); 

http://www.ppmy.cn/news/1547237.html

相关文章

《目标检测》R-CNN网络基础(RCNN,Fast-RCNN)

文章目录 1.Overfeat模型2.RCNN网络2.1 算法流程2.1.1 候选区域的生成&#xff08;了解&#xff0c;已经不再使用了&#xff09;2.1.2 CNN网络提取特征2.1.3 目标分类&#xff08;SVM&#xff09;2.1.4 目标回归&#xff08;线性回归修正坐标&#xff09;2.1.5 预测过程 2.2 算…

如何处理 iOS 客户端内 Webview H5 中后台播放的音视频问题

目录 问题描述Page Visibility API 的应用什么是 Page Visibility API&#xff1f;使用 Page Visibility API 暂停音视频完整解决方案1. 监听媒体的播放和暂停事件2. 防止自动播放3. 结合 Intersection Observer 进行媒体控制4. 手动处理应用生命周期中的事件 问题描述 在 iOS…

小黑创造心流:55. 跳跃游戏56. 合并区间

55. 跳跃游戏 小黑代码 class Solution:def canJump(self, nums: List[int]) -> bool:# 数组长度n len(nums)# 探索的最大范围develop_max 0for i in range(n):develop_max max(develop_max, inums[i])if develop_max < i and i ! n-1:return Falsereturn True 56.…

Python →爬虫实践

爬取研究中心的书目 现在&#xff0c;想要把如下网站中的书目信息爬取出来。 案例一 耶鲁 Publications | Yale Law School 分析网页&#xff0c;如下图所示&#xff0c;需要爬取的页面&#xff0c;标签信息是“<p>”&#xff0c;所以用 itemssoup.find_all("p&…

【Kafka】集成案例:与Spark大数据组件的协同应用

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《大数据前沿&#xff1a;技术与应用并进》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、什么是kafka 2、Kafka 的主要特性 3、Kafka 的…

linux常见资源查询命令(持续更新)

年纪大了&#xff0c;很多命令记不住了&#xff0c;但偶尔也需要用到&#xff0c;通过搜索也需要点时间&#xff0c;特此记录。 不同操作系统命令会有所区别&#xff0c;下面是大部分时候工作的机器系统&#xff1a; CentOS release 7.5 (Final)Kernel \r on an \m 1、实时查…

丹摩征文活动 | 丹摩智算:大数据治理的智慧引擎与实践探索

丹摩DAMODEL&#xff5c;让AI开发更简单&#xff01;算力租赁上丹摩&#xff01; 目录 一、引言 二、大数据治理的挑战与重要性 &#xff08;一&#xff09;数据质量问题 &#xff08;二&#xff09;数据安全威胁 &#xff08;三&#xff09;数据管理复杂性 三、丹摩智算…

GA/T1400视图库平台EasyCVR视频融合平台HLS视频协议是什么?

在数字化时代&#xff0c;视频监控系统已成为保障安全、提升效率的关键技术。EasyCVR视频融合云平台&#xff0c;作为TSINGSEE青犀视频在“云边端”架构体系中的重要一环&#xff0c;专为大中型项目设计&#xff0c;提供了一个跨区域、网络化的视频监控综合管理系统平台。它不仅…