提示:

  • 本模块使用了微软WebView2组件,该组件目前处于预览状态,其API未完全确定,因此本模块也将处于预览状态较长时间,所有的参数和内部实现都有可能会有所改变。
  • 组件安装地址:https://developer.microsoft.com/zh-cn/microsoft-edge/webview2/
  • WebView2组件本身可能还有奇奇怪怪的bug。
  • 在Quicker动作中修改变量名时,JS脚本中使用的Quicker变量名可能无法自动更改。
  • 本文档基于Quicker 1.23.11 版本。

基础

操作类型:

  • 打开网址:打开一个指定的网址,然后继续运行后面的模块。如果指定了“唯一性标识”并且之前已经打开了窗口,则使用已打开的窗口打开网址。
  • 打开网址并加载完成:打开一个指定的网址,等待加载完成,然后继续运行后面的模块。
  • 打开网址并等待窗口关闭:打开指定的网址,等待用户关闭窗口后再继续运行后面的模块。
  • 发送消息:使用PostWebMessageAsJson接口向网页发送消息。需要预先在网页中引入处理消息接收的代码。可用于动态更新网页的某些内容。
  • 执行脚本:在网页上下文中执行js代码。使用ExecuteScriptAsync接口。仅在顶层文档中执行(不对iframe执行)
  • 获取窗口状态:获取当前的网址、标题、是否加载完成等信息。
  • 关闭窗口:根据“唯一性标识”关闭之前已打开的窗口。
  • 重新加载/刷新:刷新网页。
  • 停止加载:停止加载网页。

动作交互

桥接对象

桥接对象用于同动作的其它部分交互,如访问动作中的变量、调用子程序等。
可以通过 window.chrome.webview.hostObjects.v 对象以异步方式访问桥接对象,或者通过 window.chrome.webview.hostObjects.sync.v 以同步方式访问桥接对象。
更多信息可参考微软官方文档

自1.23.5 版本起,可以在js中通过 $quicker 异步方式访问桥接对象,通过 $quickerSync 同步方式访问桥接对象。

读写动作变量

Quicker中使用WebView2组件的AddHostObjectToScript接口注入“v“ (v表示variables,变量)
异步操作方式:

  1. async function func(){
  2. // 注入的对象
  3. let v = await $quicker;
  4. // 读取变量
  5. let varValue = await v.getVar("变量名");
  6. // 写入变量
  7. await v.setVar("变量名", newValue);
  8. }

同步操作方式:

  1. function funcSync(){
  2. // 读取变量
  3. let varValue = $quickerSync.getVar("text");
  4. // 写入变量
  5. $quickerSync.setVar("text", "Hello world from js code");
  6. }

示例动作:

读写变量操作支持简单变量(数字/文本以及列表变量)。
词典变量在读取时自动转换为json文本数据。词典变量不支持通过setVar方法写入。

词典变量的操作

在js中无法直接操作词典变量。

为词典变量赋予一个完整的新值

  1. //setDictByJson(变量名, json内容)
  2. $quickerSync.setDictByJson("dict", "{a: 1, b: 2}");

为词典的某个key赋值:

  1. //setDictItemValue(词典变量名,键名,值)
  2. $quickerSync.setDictItemValue("dict", "c", 3);

获取词典的某个键的值:

  1. // 返回词典的某个键的值getDictItemValue(词典变量名,键名)
  2. var value = $quickerSync.getDictItemValue("dict","c");

调用子程序并返回结果

1.23.15+版本。
通过 await $quickerSp(spName, dataObj, callback) 方法调用动作中定义的子程序。
参数:

  • spName: 子程序名称
  • 子程序输入参数对象。每个key对应于子程序中作为输入参数的变量名。
  • 回调函数: function(success, outputObj)success 参数表示是否成功,outputObj 为子程序输出(对象)。 outputObj 的每个key对应子程序的一个输出变量。

注意:传入子程序的输入参数dataObj,和回调的输出参数outputObj都是对象类型
示例:

  1. // 调用子程序:返回原始输入值
  2. async function testSubprogram(){
  3. //子程序输入参数,每个key对应子程序的输入变量。 input为子程序的一个输入变量。
  4. var obj = {input:'Hello Quicker!', age:3};
  5. // 调用子程序
  6. await $quickerSp('subprogram1', obj, (success, data)=>{
  7. //处理子程序返回结果
  8. alert('success:' + success + '\n' + data.output); //output为子程序的一个输出变量
  9. });
  10. }

【以下方法不建议使用】
也可通过 await $quicker.subprogram(spName, dataJson, boolParam, callback) 方法调用动作中定义的子程序(不推荐)。
参数:

  • 子程序名
  • json序列化后的输入参数值对象。输入参数js对象的每个key对应于子程序中作为输入参数的变量名。
  • 布尔类型的备用参数,请传入false值。
  • 回调函数:function(success, data)。success参数表示是否成功,data参数表示成功时返回的结果(Json序列化后的子程序输出变量的值),出错时返回错误消息。

    • data为子程序各个输出变量名和对应的值的词典的JSON序列化文本。 ```javascript async function testSubprogram(){

      1. // 为子程序的输入参数构造对象

      var inputParam = {input:’text to process’, prop1:3, prop2:’value’}; // 调用: $quicker.subprogram(子程序名, 输入参数对象的Json序列化文本值, 布尔类型备用参数,回调函数) await $quicker.subprogram(‘子程序名’, JSON.stringify(inputParam), false,

      1. (success, data) => { //回调函数,处理
      2. if (success){
      3. // 子程序调用成功, data = 子程序输出参数的Json序列化后的文本
      4. alert(data)
      5. }else{
      6. // 子程序调用失败
      7. alert('error:' + data);
      8. }
      9. } //end of callback
      10. ); //end of subprogram
  1. }

```

注意:进行复杂操作时,请使用异步调用方式(await $quicker.subprogram()…)。同步调用时js会等待结果,可能会造成界面死锁。

示例动作:https://getquicker.net/sharedaction?code=c501debe-7e80-408c-d791-08d856359351

推荐资源

WebView2相关

前端技术相关

示例

参数传递与子程序调用

通过发送消息更新已打开的WebView窗口