Skip to content

窗口尺寸与可缩放性 ​

新 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: trueresizable: false
用户拖拽边缘改变尺寸允许,受包络夹取禁止
用户拖拽窗口位置允许仍允许
尺寸写入用户本地记忆会不会

minWidth / minHeight 是用户拖拽的下限,声明后与开窗默认尺寸一起构成宿主使用的尺寸包络。

写入规则与 resizable 正交:只有 source === 'user'(用户原生拖拽)产生的几何变化才允许写入用户本地记忆;程序化变更(宿主恢复上次尺寸、响应系统缩放等)只更新当前运行时几何,不会覆盖本地记忆。Host/Runtime 集成侧的页面通道合同(window.getGeometry 请求与 window.geometryChanged 上报及其 source 归因)见 @heybox/hb-sdk 包内 docs/runtime-host-migration.md。