如何通过 contextBridge / IPCRenderer 将结果发送给发送者?
How to send a result to sender via contextBridge / IPCRenderer?
我有一个像这样的电子
const { contextBridge, ipcRenderer } = require('electron');
contextBridge.exposeInMainWorld('electron', {
electronStore: {
get(val) {
ipcRenderer.send('electron-store-get', val);
},
set(property, val) {
ipcRenderer.send('electron-store-set', property, val);
},
// Other method you want to add like has(), reset(), etc.
},
});
和看起来像这样的 ipcMain
ipcMain.on('electron-store-get', async (event, val) => {
store.get(val);
// console.log(reply);
// return reply;
// event.reply('electron-store-get', reply);
});
ipcMain.on('electron-store-set', async (event, property, val) => {
// console.log(val);
store.set(property, val);
});
当我试图通过 electron.electronStore.get() 调用该函数时,它 returns 未定义
let a = window.electron.electronStore.get('test');
console.log(a);
但是,我在ipcRenderer.send("") 的线上测试过,我可以通过如下设置接收数据
let result = ipcRenderer.send('electron-store-get',val);
console.log(result);
这意味着,ipcRenderer 不是未定义的,并且设置已经成功,获取也是如此,只是当我调用 ipcMain Get 函数时它丢失了
您当前的预加载 API 实际上没有返回任何东西:
get(val) {
ipcRenderer.send('electron-store-get', val);
}
您需要使用同步 API: return ipcRenderer.sendSync('electron-store-get', val)
然后让您的处理程序在 main do:
ipcMain.on('electron-store-get', (event, val) => {
event.returnValue = store.get(val);
});
或者使预加载 API 异步:
get(val) {
return ipcRenderer.invoke('electron-store-get', val);
}
ipcMain.handle('electron-store-get', (event, val) => {
return store.get(val);
});
然后:
let a = await window.electron.electronStore.get('test');
我有一个像这样的电子
const { contextBridge, ipcRenderer } = require('electron');
contextBridge.exposeInMainWorld('electron', {
electronStore: {
get(val) {
ipcRenderer.send('electron-store-get', val);
},
set(property, val) {
ipcRenderer.send('electron-store-set', property, val);
},
// Other method you want to add like has(), reset(), etc.
},
});
和看起来像这样的 ipcMain
ipcMain.on('electron-store-get', async (event, val) => {
store.get(val);
// console.log(reply);
// return reply;
// event.reply('electron-store-get', reply);
});
ipcMain.on('electron-store-set', async (event, property, val) => {
// console.log(val);
store.set(property, val);
});
当我试图通过 electron.electronStore.get() 调用该函数时,它 returns 未定义
let a = window.electron.electronStore.get('test');
console.log(a);
但是,我在ipcRenderer.send("") 的线上测试过,我可以通过如下设置接收数据
let result = ipcRenderer.send('electron-store-get',val);
console.log(result);
这意味着,ipcRenderer 不是未定义的,并且设置已经成功,获取也是如此,只是当我调用 ipcMain Get 函数时它丢失了
您当前的预加载 API 实际上没有返回任何东西:
get(val) {
ipcRenderer.send('electron-store-get', val);
}
您需要使用同步 API: return ipcRenderer.sendSync('electron-store-get', val)
然后让您的处理程序在 main do:
ipcMain.on('electron-store-get', (event, val) => {
event.returnValue = store.get(val);
});
或者使预加载 API 异步:
get(val) {
return ipcRenderer.invoke('electron-store-get', val);
}
ipcMain.handle('electron-store-get', (event, val) => {
return store.get(val);
});
然后:
let a = await window.electron.electronStore.get('test');