跳到主要内容

WebView2浏览器窗口

用微软 Edge WebView2 打开网址或 HTML,并可读写动作变量、调用子程序。要自己画 WPF 界面,用 自定义窗口。只是用系统浏览器打开一个地址,用 打开网址

Win11 自带运行时。其它系统可到 WebView2 下载页 安装。动作里改变量名时,网页 JS 里写死的变量名不会跟着改。

当前模块定义

sys:webview2界面组件Action
标准模块
输入 28 · 输出 12 · 枚举 5

输入参数

  • 操作类型typeEnum必填
    填写 固定输入默认 OpenUrl
    12 个选项打开网页、打开网页并等待加载完成、打开网页并等待窗口关闭
    打开网页默认OpenUrl
    打开网页并等待加载完成OpenAndWaitLoad
    打开网页并等待窗口关闭OpenUrlAndWaitClose
    发送消息SendMessage
    执行脚本ExecuteScript
    获取窗口状态CheckWindowState
    关闭窗口(如果尚未关闭Close
    重新加载/刷新Reload
    停止加载Stop
    检查是否安装WebView2CheckInstalled
    【多标签】打开网址MultiTab_OpenUrl
    【多列】打开网址MultiColumn_OpenUrl
  • 网址或HTML内容urlText必填

    网页地址/文件路径或html代码内容

    填写 输入或变量条件 仅:OpenUrl, OpenAndWaitLoad, OpenUrlAndWaitClose
  • 网址列表urlListList必填

    每行一个:网址,或"标题|网址",或"[图标]标题|网址"格式。

    填写 输入或变量条件 仅:MultiTab_OpenUrl, MultiColumn_OpenUrl
  • 附加的浏览器参数additionalBrowserArgumentsText必填

    用于设置代理等用途

    填写 输入或变量条件 仅:OpenUrl, OpenAndWaitLoad, OpenUrlAndWaitClose
  • 虚拟主机映射virtualHostToFolderText必填

    将文件夹映射为虚拟主机名。格式:主机名|文件夹路径。多个时,每行一个。 在html中可以使用https://servername/path/to/file.png的格式访问文件。

    填写 输入或变量条件 仅:OpenUrl, OpenAndWaitLoad, OpenUrlAndWaitClose
  • User AgentuserAgentText可选

    可选。自定义UserAgent

    填写 输入或变量条件 仅:OpenUrl, OpenAndWaitLoad, OpenUrlAndWaitClose, MultiTab_OpenUrl, MultiColumn_OpenUrl
  • 窗口标题titleText必填

    窗口标题文字。未设置时,自动使用网页标题。

    填写 输入或变量条件 仅:OpenUrl, OpenAndWaitLoad, OpenUrlAndWaitClose, MultiTab_OpenUrl, MultiColumn_OpenUrl
  • 窗口图标iconText可选

    显示在窗口左上角的图标。支持fa:内置图报名:#RRGGBB或图标网址。

    填写 输入或变量条件 仅:OpenUrl, OpenAndWaitLoad, OpenUrlAndWaitClose
  • 默认背景色defaultBgColorText可选

    可选。设置窗口的默认背景色。

    填写 输入或变量条件 仅:OpenUrl, OpenAndWaitLoad, OpenUrlAndWaitClose
  • 窗口标识autoCloseKeyText可选

    (仅必要时使用)用于关闭之前打开的具有此标识的WebView2窗口。使用=表示当前动作ID。

    填写 输入或变量条件 排除:CheckInstalled默认 =
  • 如果窗口已存在modeForExistsEnum可选
    填写 固定输入条件 仅:OpenUrl, OpenAndWaitLoad默认 SkipThisStep
    5 个选项跳过此步骤、更新网址、更新网址和窗口位置
    跳过此步骤默认SkipThisStep
    更新网址UpdateUrl
    更新网址和窗口位置UpdateUrlAndPosition
    关闭并重建窗口RecreateWindow
    激活窗口BringToFront
  • JS脚本scriptText必填

    可选。

    填写 输入或变量条件 仅:OpenUrl, OpenAndWaitLoad, OpenUrlAndWaitClose, ExecuteScript
  • 消息内容sendMessageText必填

    Json格式的消息内容。词典变量会自动转换成json。

    填写 输入或变量条件 仅:SendMessage
  • 附加对象additionalObjectsList可选

    PostWebMessageAsJson的附加对象列表参数内容。目前支持路径的列表

    填写 输入或变量条件 仅:SendMessage
  • 窗口位置winLocationEnum可选

    在哪里显示选择窗口

    填写 输入或变量条件 仅:OpenUrl, OpenAndWaitLoad, OpenUrlAndWaitClose, MultiTab_OpenUrl, MultiColumn_OpenUrl默认 CenterScreen
    14 个选项跟随鼠标(指针周围)、跟随鼠标(指针右下)、屏幕中间
    跟随鼠标(指针周围)WithMouse1
    跟随鼠标(指针右下)WithMouse2
    屏幕中间默认CenterScreen
    屏幕左上TopLeft
    屏幕中上TopCenter
    屏幕右上TopRight
    屏幕左中LeftCenter
    屏幕右中RightCenter
    屏幕左下BottomLeft
    屏幕中下BottomCenter
    屏幕右下BottomRight
    全屏FullScreen
    最大化Maximized
    自定义位置Manual
  • 窗口尺寸/位置winSizeText可选

    设置选择窗口的尺寸,格式为:宽度,高度。支持像素数值或屏幕宽高百分比,详情请参考模块文档。 "窗口位置" 类型为 "自定义位置" 时用于指定显示位置,格式为:left,top,right,bottom

    填写 固定输入条件 仅:OpenUrl, OpenAndWaitLoad, OpenUrlAndWaitClose, MultiTab_OpenUrl, MultiColumn_OpenUrl
  • 默认下载文件夹defaultDownloadFolderPathText可选

    默认的文件下载存储目录

    填写 固定输入条件 仅:OpenUrl, OpenAndWaitLoad, OpenUrlAndWaitClose, MultiTab_OpenUrl, MultiColumn_OpenUrl
  • ProfileprofileNameText可选

    当需要同时登录一个网站的多个账号时,可以创建独立的Profile。请输入Profile名称,不支持文件夹路径。

    填写 固定输入条件 仅:OpenUrl, OpenAndWaitLoad, OpenUrlAndWaitClose
  • 置顶显示topMostBoolean可选
    填写 输入或变量条件 仅:OpenUrl, OpenAndWaitLoad, OpenUrlAndWaitClose, MultiTab_OpenUrl, MultiColumn_OpenUrl默认 false
  • 显示任务栏图标showInTaskbarBoolean可选
    填写 输入或变量条件 仅:OpenUrl, OpenAndWaitLoad, OpenUrlAndWaitClose默认 true
  • 不占用焦点noActivateBoolean可选

    不占用焦点时也无法在窗口中输入文字

    填写 输入或变量条件 仅:OpenUrl, OpenAndWaitLoad, OpenUrlAndWaitClose默认 false
  • 失去焦点后closeWhenLostFocusEnum可选
    填写 输入或变量条件 仅:OpenUrl, OpenAndWaitLoad, OpenUrlAndWaitClose默认 false
    7 个选项不执行操作、关闭窗口、隐藏窗口
    不执行操作默认false
    关闭窗口true
    隐藏窗口hide
    最小化窗口minimize
    如果未置顶,关闭窗口close_if_not_topmost
    如果未置顶,隐藏窗口hide_if_not_topmost
    如果未置顶,最小化窗口minimize_if_not_topmost
  • 按Esc关闭窗口escCloseWindowBoolean可选
    填写 输入或变量条件 仅:OpenUrl, OpenAndWaitLoad, OpenUrlAndWaitClose默认 false
  • 显示工具栏showToolbarBoolean可选
    填写 输入或变量条件 仅:OpenUrl, OpenAndWaitLoad, OpenUrlAndWaitClose默认 false
  • 添加DevTools桥addDevToolBoolean可选
    填写 固定输入条件 仅:OpenUrl, OpenAndWaitLoad, OpenUrlAndWaitClose默认 false
  • 窗口风格windowStyleEnum可选
    填写 输入或变量条件 仅:OpenUrl, OpenAndWaitLoad, OpenUrlAndWaitClose默认 normal
    正常默认normal
    无边框none
  • 关闭窗口时清理CookieclearCookiesBoolean可选
    填写 固定输入条件 仅:OpenUrl, OpenAndWaitLoad, OpenUrlAndWaitClose默认 false
  • 失败后停止stopIfFailBoolean可选

    失败后是否停止动作

    填写 固定输入默认 true

输出参数

  • 是否成功isSuccessBoolean

    操作是否成功。获取窗口信息时,窗口是否存在。

  • 是否安装WebView2isInstalledBoolean
    条件 仅:CheckInstalled
  • 窗口句柄hWndInteger
    条件 仅:OpenUrl, OpenAndWaitLoad, CheckWindowState
  • WebView2对象webViewObject

    可用于在C#脚本中使用,需运行在UI线程中。注意避免循环引用。

    条件 仅:OpenUrl, OpenAndWaitLoad, CheckWindowState
  • 窗口位置lastLocationText

    返回窗口坐标范围。格式为:left,top,right,bottom

    条件 仅:OpenAndWaitLoad, CheckWindowState, OpenUrlAndWaitClose
  • 当前网址currUriText

    浏览器当前网址

    条件 仅:OpenAndWaitLoad, CheckWindowState
  • 网页标题docTitleText
    条件 仅:OpenAndWaitLoad, CheckWindowState
  • 网页代码sourceCodeText
    条件 仅:OpenAndWaitLoad, CheckWindowState
  • CookiecookiesText
    条件 仅:OpenAndWaitLoad, CheckWindowState
  • 脚本运行结果scriptResultText

    json编码的脚本运行结果内容

    条件 仅:ExecuteScript
  • 预览图previewImageImage
    条件 仅:CheckWindowState
  • 导航是否已结束isNavCompletedBoolean

    是否已完成网页加载过程

    条件 仅:CheckWindowState

概述

操作类型 后显示对应参数。同一 窗口标识 可对已打开的窗口发消息、跑脚本或关掉它。

WebView2浏览器窗口

基于微软Edge浏览器内核的组件,需要安装Edge最新预览版方可使用。
操作类型
网址或HTML内容
 
网页地址/文件路径或html代码内容
附加的浏览器参数
 
用于设置代理等用途
虚拟主机映射
 
将文件夹映射为虚拟主机名。格式:主机名|文件夹路径。多个时,每行一个。 在html中可以使用https://servername/path/to/file.png的格式访问文件。
User Agent
 
可选。自定义UserAgent
窗口标题
 
窗口标题文字。未设置时,自动使用网页标题。
窗口图标
 
显示在窗口左上角的图标。支持fa:内置图报名:#RRGGBB或图标网址。
默认背景色
 
可选。设置窗口的默认背景色。
窗口标识
=
(仅必要时使用)用于关闭之前打开的具有此标识的WebView2窗口。使用=表示当前动作ID。
如果窗口已存在
JS脚本
可选。
窗口位置
在哪里显示选择窗口
窗口尺寸/位置
 
设置选择窗口的尺寸,格式为:宽度,高度。支持像素数值或屏幕宽高百分比,详情请参考模块文档。 "窗口位置" 类型为 "自定义位置" 时用于指定显示位置,格式为:left,top,right,bottom
默认下载文件夹
 
默认的文件下载存储目录
Profile
 
当需要同时登录一个网站的多个账号时,可以创建独立的Profile。请输入Profile名称,不支持文件夹路径。
失去焦点后
窗口风格
是否成功
-- 选择变量 --
操作是否成功。获取窗口信息时,窗口是否存在。
窗口句柄
-- 选择变量 --
WebView2对象
-- 选择变量 --
可用于在C#脚本中使用,需运行在UI线程中。注意避免循环引用。

参数说明

操作类型

  • 打开网页:打开网址或 HTML,然后继续。若填了 窗口标识 且窗口已在,按 如果窗口已存在 处理。
  • 打开网页并等待加载完成:打开后等到加载完再继续。
  • 打开网页并等待窗口关闭:等到用户关窗再继续。
  • 发送消息:用 PostWebMessageAsJson 给网页发 JSON。网页里要先写接收代码。
  • 执行脚本:在网页上下文跑 JS,用 ExecuteScriptAsync。只在顶层文档执行,不进 iframe。
  • 获取窗口状态:取当前网址、标题、是否加载完等。
  • 关闭窗口(如果尚未关闭):按 窗口标识 关掉已打开的窗口。
  • 重新加载/刷新 / 停止加载
  • 检查是否安装WebView2
  • 【多标签】打开网址 / 【多列】打开网址:同时打开一组相关网页,方便一起关。这两种布局不和动作其它部分交互。

失败后停止:失败是否中止。默认开启。除「检查是否安装WebView2」外都有 窗口标识

打开网页

下面参数出现在「打开网页」「打开网页并等待加载完成」「打开网页并等待窗口关闭」(部分也用于多标签 / 多列)。

网址或HTML内容:网址、本地文件路径或 HTML。

附加的浏览器参数:见 AdditionalBrowserArguments。非必要不要填,可能造成无法同时开多个 WebView2。设代理可写 --proxy-server=http://127.0.0.1:8888

虚拟主机映射:把本地目录映射成主机名。如 myserver|d:\folder,网页里可用 https://myserver/file.png 访问该目录文件。目录必须存在。多条时每行一个。

User Agent:自定义 UA。可在 这里查看 当前浏览器 UA,或查 常见设备 UA

窗口标题:未填时用网页标题。

窗口图标:左上角图标。支持 fa:内置图标名:#RRGGBB 或图标网址。

默认背景色:窗口默认背景。

窗口标识:相同标识避免开多个窗。再用本模块打开时,会在已有窗口里更新。= 表示用当前动作 ID。默认 =

如果窗口已存在:仅「打开网页」「打开网页并等待加载完成」。可选跳过此步骤、更新网址、更新网址和窗口位置、关闭并重建窗口、激活窗口。默认跳过此步骤。

JS脚本:网页加载后注入,走 AddScriptToExecuteOnDocumentCreatedAsync。「执行脚本」时则是本次要跑的代码。

窗口位置:跟随鼠标、屏幕各方位、全屏、最大化、自定义位置。默认屏幕中间。

窗口尺寸/位置:自定义位置时写 left,top,right,bottom(像素或百分比,如 981,608,2610,114325%,25%,75%,75%)。其它位置写 width,height,如 400,70050%,50%

默认下载文件夹:默认保存位置。对同一 Profile 下的 WebView 窗口都生效。

Profile:同一网站要登多个账号时,用独立 Profile 存各自用户数据。通常写一个单词或拼音,不要写文件夹路径。

置顶显示:默认关闭。

显示任务栏图标:默认开启。

不占用焦点:开启后也不能在窗口里输入文字。默认关闭。

失去焦点后:不执行操作、关闭窗口、隐藏窗口、最小化窗口,以及「如果未置顶」时的关闭 / 隐藏 / 最小化。

按Esc关闭窗口:默认关闭。

显示工具栏:前进、后退、刷新、地址栏。默认关闭。

添加DevTools桥:给页面加 DevTools 桥接。默认关闭。

窗口风格:正常,或无边框。

关闭窗口时清理Cookie:关掉时清最后打开网页的 Cookie,便于退出账号。

发送消息

窗口标识:目标窗口。

消息内容:JSON 文本,经 PostWebMessageAsJson 发出。词典变量会自动转成 JSON。

附加对象:PostWebMessageAsJson 的附加对象列表,目前支持路径列表。

网页里要先接收:

window.chrome.webview.addEventListener('message', event =>
{
console.log('recv message:', event.data);

document.getElementById('js_fanyi_input').innerText = event.data.keyword;
document.getElementById('js_fanyi_input').dispatchEvent(new Event('input',{bubbles:true}));

});

执行脚本

窗口标识:目标窗口。

JS脚本:要执行的代码,走 ExecuteScriptAsync。输出 脚本运行结果 为 JSON 编码的返回值。

多标签 / 多列

这两种布局方便同时打开一组相关网页,没有和动作其它部分交互的能力,参数也相同。

多标签:适合用多个搜索引擎搜同一个词。

多列:每列较窄,适合移动端页面(通常要改 User Agent)。

WebView2浏览器窗口

基于微软Edge浏览器内核的组件,需要安装Edge最新预览版方可使用。
操作类型
网址列表
Quicker|https://getquicker.net 小红书|https://www.xiaohongshu.com/ 微博|https://weibo.com Baidu|https://baidu.com
每行一个:网址,或"标题|网址",或"[图标]标题|网址"格式。
User Agent
Mozilla/5.0 (Linux; Android 13; SM-N960U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.5938.60 Mobile Safari/537.36
可选。自定义UserAgent
窗口标题
Quicker
窗口标题文字。未设置时,自动使用网页标题。
窗口标识
=
(仅必要时使用)用于关闭之前打开的具有此标识的WebView2窗口。使用=表示当前动作ID。
窗口位置
在哪里显示选择窗口
窗口尺寸/位置
20%,20%,80%,80%
设置选择窗口的尺寸,格式为:宽度,高度。支持像素数值或屏幕宽高百分比,详情请参考模块文档。 "窗口位置" 类型为 "自定义位置" 时用于指定显示位置,格式为:left,top,right,bottom
默认下载文件夹
F:\test
默认的文件下载存储目录
是否成功
-- 选择变量 --
操作是否成功。获取窗口信息时,窗口是否存在。

网址列表:每行一个,可以是:

  • 网址:标签标题用网页标题
  • 标题|网址:固定标题
  • 标题(ProfileName)|网址:谨慎使用。同一网站多账号时,给每个账号单独 Profile,Cookie 分开放

也支持 [图标]标题|网址

窗口标题 / 窗口标识 / 窗口位置 / 窗口尺寸/位置 / User Agent / 默认下载文件夹 / 置顶显示:含义与打开网页相同。

动作交互

桥接对象

用来访问动作变量、调用子程序。

  • 异步:window.chrome.webview.hostObjects.v,或 1.23.5+ 的 $quicker
  • 同步:window.chrome.webview.hostObjects.sync.v,或 $quickerSync

详见微软 AddHostObjectToScript

读写动作变量

注入对象名为 v(variables)。

异步:

async function func(){
let v = await $quicker;
let varValue = await v.getVar("变量名");
await v.setVar("变量名", newValue);
}

同步:

function funcSync(){
let varValue = $quickerSync.getVar("text");
$quickerSync.setVar("text", "Hello world from js code");
}

支持数字、文本和列表。词典读取时自动变成 JSON 文本,不能用 setVar 写回词典。

词典变量

不能直接当 JS 对象改。整本替换:

$quickerSync.setDictByJson("dict", "{a: 1, b: 2}");

改某个键:

$quickerSync.setDictItemValue("dict", "c", 3);

读某个键:

var value = $quickerSync.getDictItemValue("dict","c");

调用子程序

1.23.15+ 推荐:await $quickerSp(spName, dataObj)

  • spName:子程序名称
  • dataObj:输入对象,每个 key 对应子程序的一个输入变量

输入和输出都是对象,不是 JSON 字符串。

async function testSubprogram(){
var obj = {input:'Hello Quicker!', age:3};
var data = await $quickerSp('subprogram1', obj);
alert('success: ' + data.output);
}

下面这种方式不建议再用:await $quicker.subprogram(spName, dataJson, boolParam, callback)。第三个参数请传 false;回调里成功时 data 是输出变量的 JSON 文本。复杂操作请用异步,同步等待容易把界面卡死。

输出

  • 是否成功:本步是否完成。获取窗口信息时表示窗口是否存在。
  • 是否安装WebView2:仅检查安装。
  • 窗口句柄 / WebView2对象:打开网页、等待加载、获取状态。对象可在 C# 脚本里用,须在 UI 线程,避免循环引用。
  • 窗口位置left,top,right,bottom。等待加载、获取状态、等待关窗。
  • 当前网址 / 网页标题 / 网页代码 / Cookie:等待加载、获取状态。
  • 脚本运行结果:仅执行脚本。
  • 预览图 / 导航是否已结束:仅获取状态。

限制与排障

  • 未装运行时时,先用「检查是否安装WebView2」,或到官网安装。
  • 附加的浏览器参数 可能导致无法同时开多个窗口。
  • 改动作变量名不会改网页里写死的名字。
  • 词典不能 setVar,用 setDictByJson / setDictItemValue
  • 同步调子程序可能死锁,用 $quickerSp 异步。
  • 虚拟主机映射格式是 主机名|文件夹路径,主机名在前。

示例

相关链接

更新历史

  • 20230929 完善文档。增加多标签、多列说明。
  • 20240426 修正虚拟主机映射(主机名在前)。

更新于