自定义协议与深度链接
Electron 里的“自定义协议”有两种用法,注册方式不同。
应用内协议
用 myapp://app/index.html 这种地址加载本地页面,用来代替 file://。file:// 的源是 null,fetch、ES Module 和存储都会受到限制。
标准写法分两步:
- 在
app.ready之前调用protocol.registerSchemesAsPrivileged,声明这个 scheme 是标准、安全、支持 fetch 的。 ready之后调用protocol.handle,把请求映射到本地文件并返回Response。
registerFileProtocol、registerBufferProtocol 等旧接口已废弃。协议注册在 session 上。窗口若使用了自定义 partition,要在那份 session 上再 handle 一次。
处理函数里要把路径限制在资源目录内,避免 ../ 读到目录外面的文件。
深度链接
myapp://open?id=1 用来从浏览器或其他应用唤起本程序。用 app.setAsDefaultProtocolClient('myapp') 注册。
- macOS:监听
app的open-url。 - Windows:链接会出现在命令行参数里;应用已经在运行时,从
second-instance的参数里取。
协议后面的字符串由外部构造,只接受事先写好的路径和参数。