Repository navigation
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 走。