跳到正文
豫言包管理
← 全部包

豫言操作系统网页消息 0.2.0

豫言 · 库

当前网页的带 JSON 详情消息通道,接入统一事件队列。

网页消息接口规范 0.2.0

此能力组让豫言应用订阅、等待、发布和取消订阅当前文档的应用消息。名称必须以“豫言”开头(UTF-8 至多 128 字节);detail 以 UTF-8 JSON 文字传递,最多 1 MiB。订阅的消息进入本应用实例的统一事件队列(类型“消息”,见[网页事件接口规范](../网页事件/规范.汉语.md)),关闭时等待函数以“关闭”为名称返回。发布后的事件在当前文档同步派发,应用须自行用请求编号配对响应。

0.2.0 相对 0.1.0 是行为统一加一个新函数:

  • 消息与界面、定时等事件同处一个队列。等待网页消息 只取“消息”类型的事件,其余类型的事件原样留在队列里,不再被吞掉;同样,等待界面事件 与 等待网页事件 也不会吞掉未到取的消息。
  • 新增 取消订阅网页消息。
  • 同一名称重复 订阅网页消息 不产生第二个订阅(0.1.0 的重复订阅行为未规定)。
  • 详情超过 1 MiB 或不是有效 JSON 时,等待网页消息 抛事故(事件本身已被取走);通过 等待网页事件 取到的消息事件带 "详情":null 与 "详情错误":"超过一 MiB" 或 "详情错误":"不是有效 JSON"。
  • 队列上限、丢弃计数与背压规则同网页事件接口(消息类型默认上限 1024,可用 设置网页事件队列上限 调整)。

浏览器适配只传递事件名称和 JSON 值,不能执行全局回调或把 JavaScript 对象句柄交给应用。此接口不承诺跨窗口、跨 Worker 或持久消息;需要这些语义时另建能力包。当前宿主必须有文档事件队列,没有文档的平台不提供本组。

函数

  • 订阅网页消息 : 字符串 → 有:订阅当前文档里该名称的消息;名称不合法(不以“豫言”开头,或超过 128 字节)时抛事故;订阅总数至多 128 个。订阅后到达的消息才会入队,订阅前已发出的不补发。
  • 等待网页消息 : 有 → (字符串 合 字符串):等待下一个消息,返回(名称,detail 的 JSON 文字);只取消息类型;宿主关闭队列后返回(“关闭”,“null”),之后的调用继续返回相同标记。CustomEvent 没有 detail 时详情文字为 null。
  • 发布网页消息 : 字符串 → 字符串 → 有:在当前文档同步派发消息。detail 必须是有效 JSON 且不超过 1 MiB(字节),名称须合法;否则抛事故。发布者自己订阅了该名称时,也会在自己的队列里收到(应用通常用不同名称区分请求与响应)。
  • 取消订阅网页消息 : 字符串 → 有:取消订阅并移除该名称尚未取走的消息;名称未订阅时什么也不做。

失败语义

名称无效、详情非法或超过限额属于违规调用,抛事故;详情超过限额(来自页面上其他脚本发布的消息)是接收时的违规,同样抛事故,但事件已出队,应用可继续等待下一条;宿主关闭不是失败。

限额

| 项 | 限额 | | --- | --- | | 名称 | UTF-8 至多 128 字节,以“豫言”开头 | | detail | 至多 1 MiB(UTF-8 字节) | | 订阅数 | 至多 128 个名称 | | 队列 | 每类型默认 1024,超限丢弃最旧并计数(见网页事件接口) |

一致性样例

  1. 应用订阅 豫言甲 后阻塞在 等待界面事件;页面发布 豫言甲,随后用户点击带 ID 的按钮:等待界面事件 返回(click,按钮 ID),消息仍在队列里;应用随后 等待网页消息 得(豫言甲,详情文字)。
  2. 页面发布 detail 为 1 MiB + 1 字节的 豫言甲:应用的 等待网页消息 抛事故“网页消息详情超过一 MiB”,其后的消息照常收取。
  3. 订阅两次同名消息再取消一次:该名称不再产生事件,队列里遗留的未取消息被移除。

边界

本包不规定:跨窗口、跨 Worker、持久消息;消息的请求与响应配对(由应用用编号完成);除 JSON 外的详情。

依赖

查看包配置

上传历史

当前上传修订:1 ·

  1. 上传修订 1
    下载 ZIP

包层级

父包:豫言操作系统接口

没有子包。