Skip to content

v2.3.2

Latest

Choose a tag to compare

@strawberry0321 strawberry0321 released this 30 Sep 13:51
· 2 commits to main since this release

2.3.2

修掉「官方桌面端(新版 DSH)里挂件完全不显示」—— 根因不在宿主,而在注入通道。

根因

插件原来只用 ctx.webServer.tapIndex 注入客户端脚本。官方桌面端不渲染 HTTP index:
dsh-app://app/ 返回的是打包好的静态 dsh-web-frontend/dist/index.html,只往里面塞一个
__DSH_BOOT_READY__ 占位,再用宿主经 IPC 下发的 boot payload 兑现它。
所以 tapIndex 的产物只出现在 HTTP 渲染的 index 里(也就是只对 web 形态有效),
桌面端页面从未加载过 /dsh-gal/client.js:挂件 DOM 从未创建,重启多少次都一样,
而宿主那半边的路由(/dsh-gal/client.js、/api/*、/asset/*)全部 200。

改了什么

  • 两条注入通道都挂:
    • ctx.on('webserver/index-inject', …) 推一行
      { kind: 'script-src', placement: 'body', src: '/dsh-gal/client.js' } —— 官方桌面端读的就是这张表
      (由 collectIndexInjections() 在宿主启动时采集一次,随 boot payload 冻结下发);
    • tapIndex 保留,web / HTTP 形态照旧。
      幂等:表里已有这一行就不再推,也不会动别人的行。
  • 启动失败不再静默:root 起始是 visibility:hidden,而只有 renderAll() 最后一行才显形,
    原来 bootstrap 之后的任何一步抛错都会留下一个永久隐形、控制台也没有提示的挂件。
    现在整个启动过程都在 try/catch 里,失败时写明原因(控制台 + 挂件框内)并显形。
  • 失败后把 document 交还:window.__dshGalWidget 原来是 true,同文档首败后无法重试;
    现在带 failed 标记,并把上一次留下的半成品根节点清掉再挂。

验证

verify.mjs 174 项(新增:结构化行幂等 / 不误伤他人行 / 非数组不抛、
boot 全量兜底、失败可见、守卫交还)。另外对着已装的官方构建核了一遍链路:
前端 bundle 里确实有 "script-src" 的行应用器(含 __DSH_BOOT_READY__ / dshDesktopBoot)、
宿主 dsh-host-webserver 里 collectIndexInjections() 逐字符就是 emit("webserver/index-inject", table)、
renderIndex() 是先渲染结构化行再跑 tap(所以 tap 只在没有 <script src> 标签时才补,不会加载两次)、
文档没有 CSP(blob: 图片与音频不受限)、行种类是固定六种(未知种类宿主会抛错)。

安装

dsh plugin --profile desktop add C:\path\to\dsh-gal.tgz

装完完全退出 DSH Desktop 再启动(托盘退出,不是刷新页面):注入表在应用启动时冻结,
刷新只会拿到同一份旧表,挂件不会出现。用旧的 tgz 重装会把 2.3.2 的修复覆盖掉。

角色素材包

shigure-pack.zip(時雨,动画立绘)/ mashiro-pack.zip(精简版,推荐)
/ mashiro-pack-full.zip(完整版:原台词过于伤感,不建议使用)/ noir-pack.zip / karuha-pack.zip
—— 与上一版逐字节相同,只是跟着最新版 Release 走。