electron contextBridge
2021-05-27 本文已影响0人
冰落寞成
contextBridge
在隔离的上下文中创建一个安全的、双向的、同步的桥梁。
API
提供给 exposeInMainWorld
的 api
必须是一个 Function
, String
, Number
, Array
, Boolean
;或一个键为字符串,值为一个 Function
, String
, Number
, Array
, Boolean
的对象;或其他符合相同条件的嵌套对象。
Function
类型的值被代理到其他上下文中,所有其他类型的值都会被 复制 并 冻结。 在 API 中发送的任何数据 /原始数据将不可改变,在桥接器其中一侧的更新不会导致另一侧的更新。
简单示例,渲染进程和主进程通信:
import { contextBridge, ipcRenderer } from 'electron'
window.ipcRenderer = ipcRenderer
contextBridge.exposeInMainWorld('ipcRenderer', {
// 异步向主进程 发送消息
send: (channel, data) => {
let validChannels = ['toMain', 'downLoad', 'judgeUse', 'hideMenu', 'showMenu', 'window-close', 'asyncGetLocalServer']
if (validChannels.includes(channel)) {
ipcRenderer.send(channel, data)
}
},
// 同步向主进程 发送消息,
sendSync: (channel, data) => {
let validChannels = ['syncGetLocalServer']
if (validChannels.includes(channel)) {
return ipcRenderer.sendSync(channel, data)
}
},
// 异步接收主进程返回的数据
receive: async (channel) => {
let validChannels = ['authorizeBack', 'asyncBackLocalServer']
if (validChannels.includes(channel)) {
return new Promise((resolve) => {
ipcRenderer.on(channel, (event, ...args) => {
resolve(...args)
})
});
}
}
})