在开发自动化脚本时,WebView 控件 是实现原生脚本与网页 H5 双向通信、网页加载操控、JS 交互的核心组件,广泛用于网页自动化、H5 功能集成、跨端数据互通等场景。本文系统讲解 WebView 的属性、事件、函数用法。
一、WebView 控件核心定位与价值
冰狐智能辅助的 WebView 控件并非普通浏览器组件,而是专为自动化脚本设计的双向通信容器,核心能力包括:
- 加载远程网页、本地 HTML 内容,支持完整网页浏览功能;
- 原生脚本主动调用网页 JS,获取页面数据、操控 DOM 元素;
- 网页 H5 通过内置
aznfzObject对象反向调用冰狐原生脚本,实现权限操作、设备控制; - 监听页面加载、控制台输出等关键事件,精准把控网页运行状态;
- 替代传统浏览器,在自动化脚本内集成网页业务,无需跳转第三方应用。
对于自动化开发者而言,WebView 解决了原生脚本与网页数据隔离、操作割裂的痛点,让网页自动化、H5 流程对接、跨端数据交互更高效、更稳定。
二、WebView 基础用法
WebView 的使用分为模板布局配置 和脚本动态操控两部分,基础属性是搭建界面的第一步,支持静态配置与动态修改两种方式。
1. 核心基础属性
WebView 最常用的基础属性为url,用于指定初始加载的网址,配置方式如下:
- 模板静态配置 :直接在
<webView>标签中设置,界面初始化即加载对应网址; - 脚本动态设置 :通过
setUrl函数灵活修改,适配不同业务场景的网页切换。
2. 基础布局模板
基础 WebView 界面需搭配线性布局linear,实现全屏展示或自适应布局,以下是标准模板:
XML
<template>
<!-- 垂直线性布局,WebView全屏显示 -->
<linear orientation="vertical" width="matchParent" height="matchParent">
<!-- WebView控件:id唯一标识,url设置初始网址,宽高铺满父容器 -->
<webView
id="webDemo"
url="https://www.baidu.com"
width="matchParent"
height="matchParent"
/>
</linear>
</template>
id:控件唯一标识,脚本通过ui("id值")获取 WebView 实例;width/height:matchParent表示铺满父容器,适配不同设备屏幕;orientation:布局方向,垂直布局vertical适合全屏 WebView 场景。
三、WebView 核心事件
WebView 提供 3 个高频事件,用于监听页面加载、控制台输出等关键状态,事件支持模板绑定 和脚本动态注册两种方式,满足不同开发习惯。
1. pageStarted:页面开始加载事件
当 WebView 开始加载网页时触发,可用于显示加载提示、初始化加载状态,示例代码:
XML
<template>
<linear>
<!-- 模板绑定pageStarted事件 -->
<webView id="webDemo" onPageStarted="onPageStart" width="matchParent" height="matchParent"/>
</linear>
</template>
<script>
function main() {
setupUI(); // 初始化UI界面
// 方式二:脚本动态注册事件(二选一即可)
// ui("webDemo").on("pageStarted", onPageStart);
ui("webDemo").setUrl("https://www.baidu.com");
}
// 页面开始加载回调函数:参数url为当前加载的网址
function onPageStart(url) {
console.log("网页开始加载:" + url);
toast("开始加载:" + url); // 弹出提示
}
</script>
2. pageFinished:页面加载完成事件
网页加载完毕(包括成功加载、加载失败)时触发,可用于隐藏加载提示、执行后续 JS 操作、获取页面数据,示例代码:
XML
<template>
<linear>
<webView id="webDemo" onPageFinished="onPageFinish" width="matchParent" height="matchParent"/>
</linear>
</template>
<script>
function main() {
setupUI();
ui("webDemo").setUrl("https://www.baidu.com");
}
// 页面加载完成回调函数
function onPageFinish(url) {
console.log("网页加载完成:" + url);
toast("加载完成:" + url);
}
</script>
3. consoleMessage:网页控制台输出事件
当网页内 JS 执行console.log等控制台输出时触发,可用于调试网页 JS、捕获页面日志,示例代码:
XML
<template>
<linear>
<webView id="webDemo" onConsoleMessage="onConsoleMsg" width="matchParent" height="matchParent"/>
</linear>
</template>
<script>
function main() {
setupUI();
ui("webDemo").setUrl("https://www.baidu.com");
}
// 控制台输出回调函数:参数msg为网页控制台输出内容
function onConsoleMsg(msg) {
console.log("网页控制台输出:" + msg);
}
</script>
四、WebView 核心函数
WebView 提供 6 个实用函数,实现网址加载、页面导航、JS 执行等原生操控能力,是自动化脚本操控网页的核心工具。
1. setUrl:设置加载网址
作用 :动态指定 WebView 加载的网页地址,替换初始配置的url属性;参数 :url(字符串,必填)------ 目标网页地址;用法:
javascript
// 加载百度首页
ui("webDemo").setUrl("https://www.baidu.com");
// 加载本地HTML或自定义网页
ui("webDemo").setUrl("file:///sdcard/test.html");
2. 页面导航函数
goBack():网页后退,返回上一页;goForward():网页前进,前往下一页;refresh():刷新当前网页,重新加载;用法:
javascript
// 后退
ui("webDemo").goBack();
// 前进
ui("webDemo").goForward();
// 刷新
ui("webDemo").refresh();
3. exeJS:原生执行网页 JS
核心能力 :原生脚本主动调用网页 JS,可获取页面数据、操控 DOM、模拟用户操作,支持回调函数接收执行结果;参数:
js(字符串,必填):需执行的 JS 脚本代码;cb(函数,选填):JS 执行完成后的回调,参数为脚本返回值;实战示例:获取网页标题、修改页面内容:
javascript
function main() {
setupUI();
ui("webDemo").setUrl("https://www.baidu.com");
// 页面加载完成后执行JS
ui("webDemo").on("pageFinished", function() {
// 执行匿名函数,返回网页标题
ui("webDemo").exeJS(`(function() {
return document.title;
})();`, function(result) {
console.log("网页标题:" + result);
toast("当前网页标题:" + result);
});
// 修改页面内容(示例:修改百度搜索框提示文字)
ui("webDemo").exeJS(`
document.getElementById("kw").placeholder = "冰狐WebView自动化";
`);
});
}
五、双向通信
WebView 的核心优势是网页 H5 与冰狐原生脚本双向通信 ,网页通过内置aznfzObject对象,可直接调用冰狐原生功能,实现设备控制、脚本执行、弹窗提示等操作。
1. 核心内置方法
冰狐为 WebView 网页提供 4 个内置方法,无需额外配置,直接调用aznfzObject即可:
| 方法 | 作用 | 参数说明 |
|---|---|---|
exeScript(scriptName, params) |
调用冰狐原生脚本 | scriptName:脚本名;params:JSON 字符串数组(选填) |
stop() |
停止冰狐脚本运行 | 无参数 |
toast(content) |
弹出原生 Toast 提示 | content:提示文字(必填) |
2. H5 调用原生示例(网页端代码)
以下是网页 HTML 代码,嵌入冰狐自动化脚本后,可直接调用原生能力:
XML
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>冰狐H5通信Demo</title>
</head>
<body>
<button onclick="callNativeScript()">调用冰狐原生脚本</button>
<button onclick="showNativeToast()">弹出原生提示</button>
<button onclick="stopNativeScript()">停止冰狐脚本</button>
<script>
// 调用冰狐原生doTask脚本,传递参数[10, "hello"]
function callNativeScript() {
aznfzObject.exeScript("doTask", JSON.stringify([10, "hello"]));
}
// 弹出原生Toast
function showNativeToast() {
aznfzObject.toast("冰狐WebView双向通信成功!");
}
// 停止冰狐脚本
function stopNativeScript() {
aznfzObject.stop();
}
</script>
</body>
</html>
六、完整实战 Demo
以下是可直接复制运行的完整 Demo,集成 WebView 所有核心功能:页面加载监听、JS 执行、双向通信、导航控制,适配冰狐智能辅助平台所有设备。
1. 完整 Demo 源码
javascript
<template>
<!-- 主布局:垂直方向,全屏显示 -->
<linear orientation="vertical" width="matchParent" height="matchParent">
<!-- 导航按钮栏:水平布局 -->
<linear orientation="horizontal" width="matchParent" height="wrapContent">
<button id="btnBack" text="后退" onClick="onGoBack" layoutWeight="1"/>
<button id="btnForward" text="前进" onClick="onGoForward" layoutWeight="1"/>
<button id="btnRefresh" text="刷新" onClick="onRefresh" layoutWeight="1"/>
<button id="btnGetTitle" text="获取标题" onClick="onGetTitle" layoutWeight="1"/>
</linear>
<!-- WebView控件:绑定所有核心事件 -->
<webView
id="webDemo"
url="https://www.baidu.com"
width="matchParent"
height="matchParent"
onPageStarted="onPageStart"
onPageFinished="onPageFinish"
onConsoleMessage="onConsoleMsg"
/>
</linear>
</template>
<script>
// 主函数:脚本入口
function main() {
setupUI(); // 初始化UI界面
console.log("冰狐WebView全能Demo启动");
}
// 1. 页面开始加载回调
function onPageStart(url) {
console.log("开始加载:" + url);
toast("加载中:" + url);
}
// 2. 页面加载完成回调
function onPageFinish(url) {
console.log("加载完成:" + url);
toast("加载完成");
}
// 3. 控制台输出回调
function onConsoleMsg(msg) {
console.log("网页日志:" + msg);
}
// 导航按钮点击事件
function onGoBack() {
ui("webDemo").goBack(); // 后退
}
function onGoForward() {
ui("webDemo").goForward(); // 前进
}
function onRefresh() {
ui("webDemo").refresh(); // 刷新
}
// 获取网页标题:执行JS并接收结果
function onGetTitle() {
ui("webDemo").exeJS(`(function() {
return document.title;
})();`, function(title) {
console.log("当前标题:" + title);
toast("网页标题:" + title);
});
}
</script>
2. Demo 功能说明
- 界面包含后退、前进、刷新、获取标题4 个功能按钮,操控网页导航与数据获取;
- 实时监听网页加载状态,通过 Toast 和控制台输出提示;
- 点击「获取标题」按钮,原生执行网页 JS,获取并展示当前网页标题;
- 支持所有冰狐智能辅助支持的 Android 设备,无需 Root,直接运行。
七、WebView 开发避坑指南
- 双向通信权限 :仅加载的网页可调用
aznfzObject,第三方未授权网页无法调用,避免安全风险; - JS 执行时机 :必须在
pageFinished(页面加载完成)后执行exeJS,否则页面未渲染,JS 执行失败; - 参数格式规范 :H5 调用
exeScript时,params必须为JSON 数组格式字符串,否则原生无法解析; - 页面加载异常 :加载失败时
pageFinished仍会触发,可通过 JS 判断页面状态,添加异常处理; - 控制台调试 :开启冰狐调试模式,通过
consoleMessage事件捕获网页 JS 错误,快速定位问题。
八、总结
WebView 控件是自动化脚本的核心跨端组件 ,打通了原生脚本与网页 H5 的通信壁垒,实现了网页加载、DOM 操控、双向通信、自动化执行一体化能力。本文从基础属性、核心事件、函数用法、双向通信到完整 Demo,全面覆盖 WebView 控件的实战开发要点。掌握 WebView 后,可轻松实现网页自动化、H5 功能集成、跨端数据交互等复杂自动化场景,大幅提升脚本的功能扩展性与实用性。