Appearance
窗口尺寸与可缩放性
新 PC 工坊小程序在 package.json#heybox.window 声明开窗默认尺寸与可缩放性,随包发布,遵循开发者声明优先、用户拖动次之、平台兜底。
窗口位置不对开发者开放:不能声明、不能设置。位置只由用户原生拖拽产生,由 Host 按小程序身份本地记忆,并在下次开窗时恢复。
声明默认尺寸
json
{
"heybox": {
"platforms": ["android", "ios", "ohos", "windows", "macos"],
"window": {
"defaultWidth": 480,
"defaultHeight": 900,
"minWidth": 360,
"minHeight": 600,
"resizable": true
}
}
}window 整体可选。省略时使用宿主 Manifest 的兜底尺寸,行为与未提供声明时完全一致;声明后写入 dist/manifest.json,所有平台都会写入,由各宿主自行决定是否消费。
字段
| 字段 | 类型 | 必填 | 含义 |
|---|---|---|---|
defaultWidth | 正整数 | 否 | 默认窗口内容宽度(逻辑像素) |
defaultHeight | 正整数 | 否 | 默认窗口内容高度(逻辑像素) |
minWidth | 正整数 | 否 | 用户拖拽不得低于的宽度下限 |
minHeight | 正整数 | 否 | 用户拖拽不得低于的高度下限 |
resizable | 布尔 | 否 | 是否允许用户手动拖拽改变尺寸;省略时取平台默认 true |
字段命名为 defaultWidth / defaultHeight 而不是 width / height,因为它表达的是开窗初值,不是窗口当前尺寸:用户可能拖过,运行时真实尺寸请用 viewport.getWindowInfo() 读取。
构建期校验
window 按与 heybox.permissions 相同的严格风格校验,未知字段直接失败,不做静默忽略:
{}等空声明会被拒绝,至少声明一个字段。- 数值字段必须是正整数(拒绝字符串、小数、
null、布尔),并且不得大于16384。真正的上限是宿主侧显示器工作区,不在声明里表达。 resizable必须是布尔,拒绝0/1/"true"。minWidth必须与defaultWidth同时声明,minHeight必须与defaultHeight同时声明,且min ≤ default。- 显式拒绝
width/height写法,并提示改用defaultWidth/defaultHeight。 x/y会作为未知字段显式报错,不会静默忽略:位置不开放声明。
hb-sdk build 与 hb-sdk remote deploy 还会校验 dist/manifest.json.window 与 package.json#heybox.window 一致,不一致时要求重新构建。
PC 本地调试
通过 hb-sdk dev 的桌面入口打开时,支持本地窗口声明的 PC 工坊插件会读取开发服务器上的 heybox.window 快照,不需要先发布小程序,也不要求声明工作区卡片。读取成功时,本地声明优先于后端版本的窗口声明;读取失败时沿用后端声明与宿主兜底规则。
本地 Manifest 的访问凭据仅由桌面启动入口传给插件,不能放进小程序页面 URL。窗口实际尺寸仍受用户尺寸记忆和显示器工作区约束。
resizable 语义
resizable 只约束用户手动拖拽:
| 场景 | resizable: true | resizable: false |
|---|---|---|
| 用户拖拽边缘改变尺寸 | 允许,受包络夹取 | 禁止 |
| 用户拖拽窗口位置 | 允许 | 仍允许 |
| 尺寸写入用户本地记忆 | 会 | 不会 |
minWidth / minHeight 是用户拖拽的下限,声明后与开窗默认尺寸一起构成宿主使用的尺寸包络。
写入规则与 resizable 正交:只有 source === 'user'(用户原生拖拽)产生的几何变化才允许写入用户本地记忆;程序化变更(宿主恢复上次尺寸、响应系统缩放等)只更新当前运行时几何,不会覆盖本地记忆。Host/Runtime 集成侧的页面通道合同(window.getGeometry 请求与 window.geometryChanged 上报及其 source 归因)见 @heybox/hb-sdk 包内 docs/runtime-host-migration.md。