跳到主要内容

自定义协议与深度链接

Electron 里的“自定义协议”有两种用法,注册方式不同。

应用内协议​

用 myapp://app/index.html 这种地址加载本地页面,用来代替 file://。file:// 的源是 null,fetch、ES Module 和存储都会受到限制。

标准写法分两步:

  1. 在 app.ready 之前调用 protocol.registerSchemesAsPrivileged,声明这个 scheme 是标准、安全、支持 fetch 的。
  2. ready 之后调用 protocol.handle,把请求映射到本地文件并返回 Response。

registerFileProtocol、registerBufferProtocol 等旧接口已废弃。协议注册在 session 上。窗口若使用了自定义 partition,要在那份 session 上再 handle 一次。

处理函数里要把路径限制在资源目录内,避免 ../ 读到目录外面的文件。

深度链接​

myapp://open?id=1 用来从浏览器或其他应用唤起本程序。用 app.setAsDefaultProtocolClient('myapp') 注册。

  • macOS:监听 app 的 open-url。
  • Windows:链接会出现在命令行参数里;应用已经在运行时,从 second-instance 的参数里取。

协议后面的字符串由外部构造,只接受事先写好的路径和参数。

相关文档​