Android WebView 使用指南强化版

Android WebView介绍、优势和使用教程

WebView是Android平台中一个非常重要的控件,它可以用来在Android应用中显示网页。WebView使用WebKit引擎来渲染网页,因此可以很好地兼容Web标准。

WebView的介绍

WebView是一个Android控件,它可以用来在Android应用中显示网页。WebView使用WebKit引擎来渲染网页,因此可以很好地兼容Web标准。

WebView的使用非常简单,只需要在布局文件中添加WebView控件,然后调用WebView的loadUrl()方法即可加载网页。

WebView功能

  • 显示网页内容:WebView可以显示HTML、CSS和JavaScript等内容,因此可以用于展示网站、新闻、文章等。可以动态加载网页内容。
  • 与网页交互:WebView可以与网页进行交互,例如点击链接、输入文本等。
  • 自定义WebView:WebView可以自定义外观和行为,例如设置背景颜色、字体大小等。

WebView优势

  • 跨平台:WebView使用WebKit引擎,因此可以跨平台使用。
  • 动态更新:WebView可以动态更新网页内容,因此可以用于展示最新信息。
  • 安全性:WebView使用沙盒机制,因此可以防止恶意网页对应用程序的访问。

WebView的使用教程

创建WebView

要创建WebView,只需要在布局文件中添加WebView控件即可:

<WebViewandroid:id="@+id/webView"android:layout_width="match_parent"android:layout_height="match_parent"/>

加载网页

要加载网页,只需要调用WebView的loadUrl()方法即可:

webView.loadUrl("https://www.baidu.com");

与JavaScript进行交互

WebView可以与JavaScript进行交互,这可以实现一些非常有趣的功能。

要与JavaScript进行交互,只需要实现WebViewClient和WebChromeClient接口即可。

WebViewClient接口用于处理WebView加载网页时的事件,例如网页加载完成、网页加载失败等。

WebChromeClient接口用于处理WebView加载网页时与JavaScript交互的事件,例如网页弹出警告框、网页弹出对话框等。

常用属性

WebView具有以下常用属性:

  • android:layout_width:WebView的宽度
  • android:layout_height:WebView的高度
  • android:layout_gravity:WebView的布局方式
  • android:background:WebView的背景颜色
  • android:layerType:WebView的层级类型
  • android:overScrollMode:WebView的滚动方式
  • android:scrollbars:WebView是否显示滚动条
  • android:scrollBarStyle:WebView滚动条的样式
  • android:webViewClient:WebView的客户端
  • android:webChromeClient:WebView的Chrome客户端

Android WebView可以设置的参数有很多,以下是一些常用的参数及其含义:

  • android:layout_width:用于设置WebView的宽度

  • android:layout_height:用于设置WebView的高度

  • android:layout_gravity:用于设置WebView在布局中的布局方式

  • android:background:用于设置WebView的背景颜色

  • android:layerType:用于设置WebView的层级类型

  • android:overScrollMode:用于设置WebView的滚动方式

  • android:scrollbars:用于设置WebView是否显示滚动条

  • android:scrollBarStyle:用于设置WebView滚动条的样式

  • android:webViewClient:用于设置WebView的客户端。WebViewClient是WebView的回调接口,用于处理WebView加载网页时的事件,例如网页加载完成、网页加载失败等。

  • android:webChromeClient:用于设置WebView的Chrome客户端。WebChromeClient是WebView的回调接口,用于处理WebView加载网页时与JavaScript交互的事件,例如网页弹出警告框、网页弹出对话框等。

除了这些常用属性之外,WebView还可以设置其他属性,例如:

  • android:allowFileAccess:是否允许WebView访问文件系统
  • android:allowContentAccess:是否允许WebView访问内容提供者
  • android:allowFileAccessFromFileURLs:是否允许WebView从文件URL加载资源
  • android:allowUniversalAccessFromFileURLs:是否允许WebView从任意文件URL加载资源
  • android:cacheMode:WebView的缓存模式
  • android:databaseEnabled:是否启用WebView的数据库功能
  • android:domStorageEnabled:是否启用WebView的DOM存储功能
  • android:geolocationEnabled:是否启用WebView的地理位置功能
  • android:hardwareAccelerated:是否使用硬件加速
  • android:initialScale:WebView的初始缩放级别
  • android:loadWithOverviewMode:是否在WebView加载网页时使用全屏模式
  • android:mediaPlaybackRequiresUserGesture:是否在WebView播放音频或视频时需要用户手势
  • android:mixedContentMode:WebView在加载混合内容(即包含http和https资源)时的模式
  • android:pluginState:WebView的插件状态
  • android:saveFormData:是否保存表单数据
  • android:savePassword:是否保存密码
  • android:selectAllOnFocus:是否在WebView获得焦点时选择所有文本
  • android:useWideViewPort:是否在WebView加载网页时使用宽视图模式
  • android:userAgent:WebView的用户代理字符串

这些属性可以用来配置WebView的行为和外观。

常用方法

WebView具有以下常用方法:

  • loadUrl():加载网页
  • reload():重新加载网页
  • canGoBack():是否可以返回上一页
  • goBack():返回上一页
  • canGoForward():是否可以前进下一页
  • goForward():前进下一页
  • evaluateJavascript():执行JavaScript代码
  • addJavascriptInterface():将Java对象暴露给JavaScript

WebView和原生交互

Android WebView和原生可以通过以下两种方式进行交互:

  • 通过JavaScript
  • 通过WebViewClient和WebChromeClient

1. 通过JavaScript

通过JavaScript,WebView可以与原生进行交互。原生可以通过WebView的evaluateJavascript()方法来执行JavaScript代码,也可以通过WebView的addJavascriptInterface()方法来将Java对象暴露给JavaScript。

以下是通过JavaScript进行交互的示例代码:

// 在Java代码中,将一个Java对象暴露给JavaScript
WebView webView = findViewById(R.id.webView);
webView.addJavascriptInterface(new MyJavaScriptInterface(), "myObject");// 在JavaScript代码中,调用Java对象的方法
var myObject = window.myObject;
myObject.showToast("Hello, world!");

2. 通过WebViewClient和WebChromeClient

通过WebViewClient和WebChromeClient,WebView可以处理JavaScript事件,例如网页加载完成、网页加载失败、网页弹出对话框等。

以下是通过WebViewClient和WebChromeClient进行交互的示例代码:

// 实现WebViewClient接口,处理网页加载完成事件
class MyWebViewClient extends WebViewClient {@Overridepublic void onPageFinished(WebView view, String url) {// 网页加载完成后,执行操作}
}// 实现WebChromeClient接口,处理网页弹出对话框事件
class MyWebChromeClient extends WebChromeClient {@Overridepublic boolean onJsAlert(WebView view, String url, String message, JsResult result) {// 处理网页弹出警告框事件return true;}
}// 将WebViewClient和WebChromeClient设置给WebView
WebView webView = findViewById(R.id.webView);
webView.setWebViewClient(new MyWebViewClient());
webView.setWebChromeClient(new MyWebChromeClient());

WebView和原生示例

在Android中,您可以通过WebView和原生代码进行交互,使Web页面与Android应用程序进行数据交换和调用原生功能。以下是一个简单示例代码,演示了如何在WebView中调用原生代码并从原生代码返回结果:

首先,我们在Android原生代码中创建一个JavaScript接口类,用于与WebView进行交互:

import android.webkit.JavascriptInterface;
import android.webkit.WebView;
import android.widget.Toast;public class JavaScriptInterface {private WebView webView;public JavaScriptInterface(WebView webView) {this.webView = webView;}// 在JavaScript中调用此方法@JavascriptInterfacepublic void showToast(String message) {Toast.makeText(webView.getContext(), message, Toast.LENGTH_SHORT).show();}// 在JavaScript中调用此方法,并返回结果给JavaScript@JavascriptInterfacepublic String getNativeData() {// 在这里执行原生代码逻辑,获取需要返回给JavaScript的数据String nativeData = "这是来自原生代码的数据";return nativeData;}
}

接下来,在Android Activity(或 Fragment)中,我们将WebView与JavaScript接口类进行关联,并加载Web页面:

import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;public class MainActivity extends AppCompatActivity {private WebView webView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);webView = findViewById(R.id.webview);// 启用JavaScriptWebSettings webSettings = webView.getSettings();webSettings.setJavaScriptEnabled(true);// 创建JavaScript接口实例,传入WebViewJavaScriptInterface jsInterface = new JavaScriptInterface(webView);// 将JavaScript接口类与WebView关联webView.addJavascriptInterface(jsInterface, "AndroidInterface");// 加载Web页面webView.loadUrl("file:///android_asset/index.html");}
}

在上述代码中,我们在WebView中启用JavaScript,并创建了JavaScriptInterface实例,然后将其与WebView关联起来。我在这里给它起了一个名字"AndroidInterface",该名称将在JavaScript中使用。

现在,我们可以在Web页面的JavaScript代码中调用原生代码并处理返回结果:

<!DOCTYPE html>
<html>
<head><title>WebView与原生代码交互示例</title>
</head>
<body><h1>WebView与原生代码交互示例</h1><button onclick="showToast()">调用原生代码</button><script>function showToast() {// 在JavaScript中调用原生代码AndroidInterface.showToast('这是来自WebView的消息');// 在JavaScript中调用原生代码,并获取返回结果var nativeData = AndroidInterface.getNativeData();alert(nativeData);}</script>
</body>
</html>

在上面的示例中,我们在JavaScript代码中使用AndroidInterface对象来调用原生代码的方法。在示例中,我们调用了showToast方法来显示一个原生的Toast消息,并调用了getNativeData方法来获取原生代码返回的数据,并通过alert弹出结果。

请注意,为了确保安全性,请仅在您信任的WebView中启用JavaScript接口,并且在JavaScript接口类中限制公开的方法和功能。

以上就是一个简单的示例,演示了如何在Android中使用WebView与原生代码进行交互。您可以根据具体需求和场景,定制和扩展这些示例代码。

WebView的安全性

WebView存在一定的安全隐患,例如JavaScript代码可以执行恶意代码,或者网页可以窃取用户数据。因此,在使用WebView时,需要注意以下安全措施:

  • 只加载可信任的网页
  • 使用WebViewClient和WebChromeClient接口来处理JavaScript事件
  • 使用XSS过滤器来防止JavaScript代码执行恶意代码
  • 使用数据加密来保护用户数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/72540.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序视频播放

微信小程序视频播放 官方地址&#xff1a; https://developers.weixin.qq.com/miniprogram/dev/component/video.html binderror 视频错误信息 show-play-btn 是否显示视频底部控制栏的播放按钮 show-fullscreen-btn 是否显示全屏按钮 controls 是否显示默认播放控件 enable-p…

Mysql和Oracle的语法区别?

Mysql和Oracle是两种不同的关系型数据库。 MySQL通常在中小型应用程序、Web应用程序和小型企业中广泛使用&#xff0c;因为它易于学习和部署&#xff0c;而且成本较低。 Oracle数据库通常用于大型企业和复杂的企业级应用程序&#xff0c;因为它提供了高度可扩展性、高可用性…

Unity——脚本与导航系统

Unity内置了一个比较完善的导航系统&#xff0c;一般称为Nav Mesh&#xff08;导航网格&#xff09;&#xff0c;用它可以满足大多数游戏中角色自动导航的需求。 一、导航系统相关组件 Unity的导航系统由以下几个部分组成&#xff1a; Nav Mesh。Nav Mesh与具体的场景关联&…

终端登录github两种方式

第一种方式 添加token&#xff0c;Setting->Developer Setting 第二种方式SSH 用下面命令查看远程仓库格式 git remote -v 用下面命令更改远程仓库格式 git remote set-url origin gitgithub.com:用户名/仓库名.git 然后用下面命令生成新的SSH秘钥 ssh-keygen -t ed2…

Java基础学习笔记-1

前言 Java 是一门强大而广泛应用的编程语言&#xff0c;它的灵活性和跨平台特性使其成为许多开发者的首选。无论您是刚刚入门编程&#xff0c;还是已经有一些编程经验&#xff0c;掌握 Java 的基础知识都是构建更复杂程序的关键。 本学习笔记旨在帮助您深入了解 Java 编程语言…

代码随想录算法训练营Day56 || ● 583. 两个字符串的删除操作 ● 72. 编辑距离

今天接触到了真正的距离&#xff0c;但可以通过增删改操作来逼近。 问题1&#xff1a;583. 两个字符串的删除操作 - 力扣&#xff08;LeetCode&#xff09; 给定两个单词 word1 和 word2 &#xff0c;返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字…

Mysql学习之——增删改查语句

Mysql的增删改查 一、数据库操作 1.查询所有数据库 show databases&#xff1b;2.使用某个数据库 如果我已经通过show databases知道有a、b、c三个数据库&#xff0c;那我想用数据库a怎么办呢? use 数据库名&#xff1b; eg:use a;3.查询当前使用的数据库 如果我不知道当…

请大家一定不要像我们公司这样打印log日志

前言 最近接手了公司另一个项目&#xff0c;熟悉业务和代码苦不堪言。 我接手一个新项目&#xff0c;有个习惯&#xff0c;就是看结构&#xff0c;看数据库&#xff0c;搜代码。 其中搜代码是我个人这些年不知不觉形成的癖好&#xff0c;我下面给大家展示下这个小癖好。 正文 我…

vue3:3、项目目录和关键文件

关于vsvode的更改 <!-- 加上setup允许在script中直接编写组合式api --> <script setup> // 组件引入后直接用 import HelloWorld from ./components/HelloWorld.vue import TheWelcome from ./components/TheWelcome.vue</script><!-- 1、js放在最上面&am…

linux安装postgresql13

linux安装postgresql13 1. 安装2. 数据库初始化3.配置远程访问3.1 修改配置文件3.2 重启服务3.3 测试连接 1. 安装 linux下载链接&#xff1a;https://www.postgresql.org/download/linux/ubuntu/安装命令sudo sh -c echo "deb https://apt.postgresql.org/pub/repos/apt…

Linux 中的 chmod 命令及示例

在 Unix 操作系统中,chmod命令用于更改文件的访问模式。该名称是change mode的缩写。其中规定每个文件和目录都有一组权限来控制权限,例如谁可以读取、写入或执行该文件。其中权限分为三类:同时读、写和执行,用“r”、“w”和“x”表示。这些字母组合在一起形成一组用户的特…

20230908_python练习_服务端与客户端数据交互

用户可以通过简单操作进行服务端数据交互&#xff0c;通过简单的sql语句直接获取EXCEL表&#xff0c;可以用来作为交互的基础。主要涉及三部分&#xff1a; 1:数据库存储表结构 --日志记录表结构 create table shzc.yytowz_service_title (leixing varchar2(18),ziduan1 v…

软件测试/测试开发丨学会与 AI 对话,高效提升学习效率

点此获取更多相关资料 简介 ChatGPT 的主要优点之一是它能够理解和响应自然语言输入。在日常生活中&#xff0c;沟通本来就是很重要的一门课程&#xff0c;沟通的过程中表达越清晰&#xff0c;给到的信息越多&#xff0c;那么沟通就越顺畅。 和 ChatGPT 沟通也是同样的道理&…

单目标应用:基于成长优化算法(Growth Optimizer,GO)的微电网优化调度MATLAB

一、微网系统运行优化模型 微电网是由分布式电源、储能装置和能量转换装置等组成的小型发配电系统&#xff0c;具有成本低、电压低、污染小等特点。由于环保和能源压力&#xff0c;清洁可再生能源和分布式能源工业发展潜力巨大。微电网控制器可实现对电网的集中控制&#xff0…

搭建RabbitMQ消息服务,整合SpringBoot实现收发消息

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;3年JAVA全栈开发经验&#xff0c;专注JAVA技术、系统定制、远程指导&#xff0c;致力于企业数字化转型&#xff0c;CSDN博客专家&#xff0c;蓝桥云课认证讲师。 目录 一、前言1.1 什么是消息队列1.2 RabbitMQ 是什么1.…

Linux:【Mysql】Centos7安装mysql8.0

目录 一、环境及版本介绍 二、安装前准备 三、开始安装 一、环境及版本介绍 Linux环境&#xff1a;Centos7 Mysql版本&#xff1a;8.0.26 安装时使用的用户&#xff1a;root 二、安装前准备 1.1、下载Centos7镜像 网上寻找相关资源即可 1.2、下载VMwareWorkstation Pro并…

【LeetCode-中等题】208. 实现 Trie (前缀树)

文章目录 题目方法一&#xff1a;利用数组构建26叉树方法二&#xff1a;利用哈希表构建26叉树 题目 方法一&#xff1a;利用数组构建26叉树 插入图示&#xff1a; 全搜索和前缀搜索&#xff1a; 注意&#xff1a;全局匹配匹配完直接返回插入时的标志位 而前缀匹配时&#xff…

OpenWrt系统开发笔记

openWrt英文官网&#xff1a; https://openwrt.org/ 中文官网&#xff1a; http://www.openwrt.org.cn/ 一、开发环境及编译 在github上有两个源码使用的比较多   一个是lede,地址为&#xff1a;https://github.com/coolsnowwolf/lede   另一个为OpenWrt的官方源码&#…

Redis 管道

1. 面试题 1.1 如何优化频繁命令往返造成的性能瓶颈? 1.2 问题由来 Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。一个请求会遵循以下步骤&#xff1a; 1 客户端向服务端发送命令分四步(发送命令→命令排队→命令执行→返回结果)&#xff0c;并监听Socket返…

清空一下问题机器的ClickOnce cache

清空ClickOnce缓存通常需要通过操作系统的命令行工具来完成。以下是在Windows操作系统上清空ClickOnce缓存的步骤&#xff1a; 1. **关闭所有ClickOnce应用程序**&#xff1a;在清空缓存之前&#xff0c;确保没有任何ClickOnce应用程序正在运行。 2. 打开**命令提示符**&…