Repository navigation
[Bug][Desktop 0.2.0-rc.2][Windows] dsh-app:// 协议未注册 ServiceWorker 特权:通知类插件「点击跳回对话」「审批快捷裁决」整体失效 #8800
Replies: 2 comments
收尾更新(报告人)主要痛点已解决:「点击通知无法回到对话」已在插件侧修复——chromoany/dsh-notify-me 1.5.2 用 顺带更正我此前的一条判断:我曾用 CDP 合成注入测得「沙箱 renderer 静默拦截外部协议」并推断该通道在真实壳不可用——这个结论被真实手测推翻。合成输入没有复现真实通知点击的激活/前台权利链条,合成观察不能外推。以真实手测为准。 SW 特权请求的剩余价值(供官方排期参考,本帖作为报告人先关闭,接手时可重开):
修法建议不变: |
我找到了确切原因,而且是一行:特权块里没有
|
Uh oh!
There was an error while loading. Please reload this page.
环境
dsh-notify-me(系统通知 + 点击通知跳回对应对话 + 审批通知快捷裁决)问题
dsh-app://app这个自定义协议源没有注册 Service Worker 特权,navigator.serviceWorker.register()直接被拒:(可通过页面内
navigator.serviceWorker.register(...)或任意依赖 SW 的插件复现;window.__dshNotifyMe.debug()的bridge字段也直接打印了这条错误。)实际影响(已实测)
notificationclick,也就没有带用户激活的clients.focus();降级路径里页面侧的window.focus()没有用户激活,被 Chromium 无视。实测向插件的 BroadcastChannel 发navigate: true消息,dsh.sessions.current正确切换(切会话逻辑完好),但窗口不被抬到前台——用户感知就是「点了通知没反应」。Notificationaction buttons 只存在于 SW 的showNotification,页面new Notification()无法携带「同意 / 拒绝」按钮,相关开关自动退化。建议
给
dsh-appscheme 注册serviceWorker特权,即webContents/protocol 层对自定义协议声明registerServiceWorker: true(Chromium 要求自定义协议以registerServiceSchemes/privilege 方式登记,Electron 下为protocol.registerSchemesAsPrivileged([{ scheme: 'dsh-app', privileges: { /* standard, secure, ... */ serviceWorker: true } }])一类的声明级改动)。加特权后 SW 作用域、notificationclick、clients.focus()均按标准语义生效,插件生态(通知类、离线缓存类、推送类)都能直接受益。相关讨论:#8044(插件独立窗口 seam)解决的是「插件自己开窗口」,本帖是「插件把主窗口带到前台 + 使用标准通知通道」,两者互补。
复现
桌面端 0.2.0-rc.2 任意页面控制台:
All reactions