Electron 如何在一个ipc主通道(同一通道)中区分两个ipc渲染器

Electron 如何在一个ipc主通道(同一通道)中区分两个ipc渲染器,electron,ipc,ipcmain,Electron,Ipc,Ipcmain,我想检测特定的帧/浏览器窗口。我有一个主进程和两个浏览器窗口,这三个窗口都使用相同的通道互相发送消息。总的来说,我需要检测其中一个。我看到IPCmain事件有一个名为frameId的函数,但当我使用它时,我没有定义它 ipcMain.once("postMessage", (event, message) => { if(!activeRequest) return; activeRequest.json(message).send(); }); 您可以在ipc mess

我想检测特定的帧/浏览器窗口。我有一个主进程和两个浏览器窗口,这三个窗口都使用相同的通道互相发送消息。总的来说,我需要检测其中一个。我看到IPCmain事件有一个名为frameId的函数,但当我使用它时,我没有定义它

ipcMain.once("postMessage", (event, message) => {
    if(!activeRequest) return;
    activeRequest.json(message).send();
});

您可以在ipc message Payad中传递标识,也可以通过ipc message的发件人对象获取windows web内容id。

您可以通过访问第一个参数events对象中的发件人对象,从主进程获取当前web内容id

   console.log(event.sender.webContents.id);
您还可以通过渲染器进程传递事件来自的窗口的id

  // in the renderer process do this
  electron.ipcRenderer.send("new-message", { 
      winId: electron.remote.getCurrentWebContents().id , 
      message: "Hi"
  });

当主进程收到此事件时,您只需访问消息对象中的
winId
属性

您想知道发送
postMessage
事件的浏览器窗口吗?是。目前我有两个浏览器窗口连接到同一事件的主进程谢谢你的回答。我做了第一个选择,但我正在寻找替代方案。您能告诉我如何获取窗口内容id吗?我尝试了几种方法来获取id,但没有成功。您可以在ipc.on回调中获得event.sender对象。Event.sender.senderId将包含发件人的窗口内容id