在昨天的時候,已經用過ipcRendered.sendSync(), 昨天的代碼是這樣的
renderer.js文件
const ele_sendbtn = document.getElementById("send_btn")
ele_sendbtn.onclick = function () {
console.log("this is renderer output log"
,ipcRenderer.sendSync('synchronous-message', datas)) //同步處理
alert(datas)
}
main.js 文件中
ipcMain.on('synchronous-message', function (event, arg) {
console.log(arg);
event.returnValue = "XXX";
});
主進程和渲染進程通信成功,如下圖

今天又寫了一個是這樣的(搞了好久才搞明白,同步異步 處理是不一樣的,這是異步處理)
以下代碼是已更正后的結果
renderer.js 如下:
submit.onclick = function (e) {
let data = ele_filepath.files[0].path;
console.log(data);
ipcRenderer.send('uploadFile', data)
}
main.js 如下:
ipcMain.on('uploadFile', (event, arg) => {
console.log("filePath:", arg);
// event.returnValue = {msg:'OK',
// code:0}
event.sender.send('uploadFileSuccess',{
msg:'OK',
code:0
})
})
官網API鏈接: https://www.electronjs.org/docs/api/ipc-main#ipcmainhandleoncechannel-listener
划重點:
- When sending a message, the event name is the
channel
. - To reply to a synchronous message, you need to set
event.returnValue
. - To send an asynchronous message back to the sender, you can use
event.reply(...)
. This helper method will automatically handle messages coming from frames that aren't the main frame (e.g. iframes) whereasevent.sender.send(...)
will always send to the main frame.
PS: 如果能耐心的看完這段話,我就不會被坑了小1天的時間,教訓呀