跳到主要内容

结构化克隆

Electron 的 IPC 和 contextBridge 传递数据时使用结构化克隆算法,和浏览器 postMessage 同一类规则。

可以传递的值包括:

  • 字符串、数字、布尔、null、undefined、bigint
  • 普通对象和数组
  • Date、RegExp、Map、Set
  • ArrayBuffer、类型化数组
  • Error(跨边界时往往只保留消息等有限字段)

不能传递的值包括函数、DOM 节点、Symbol 作为数据时的一部分,以及 Electron 内部的绑定对象(例如直接把 ipcRenderer 当对象送过桥)。

类的实例在克隆后只剩下可复制的数据字段,方法不会跟着过去。跨进程的接口使用纯数据对象。

ArrayBuffer 可以放进转交列表(transfer),所有权移到对面,发送侧的缓冲区随之失效,从而避免再复制一份大内存。

contextBridge 对非函数值还会冻结复制后的结果。函数不是被克隆,而是被代理:页面调用时,函数仍在预加载脚本一侧执行。

相关文档​