【问题标题】:Electronjs ipcMain doesn't send message to another window with ipcRendererElectronjs ipcMain 不会使用 ipcRenderer 将消息发送到另一个窗口
【发布时间】:2020-11-11 13:48:56
【问题描述】:

我正在尝试将文本从一个窗口发送到另一个窗口,但我做不到

这是我主要听的地方

ipcMain.on('fromRenderer1', (e,arg) => {
    createWindow2()    
    console.log(arg)
    window2.webContents.on("toRenderer2",()=>{
       window2.webContents.send("toRenderer2","hi from main")
    })    
})

我可以在 console.log 中看到终端中的文本,但是当我尝试将文本“hi from main”发送到 window2 时,没有被调用。

这是window2代码

const { ipcRenderer } = require("electron");
ipcRenderer.on('toRenderer2',(event,arg) =>{
      console.log(arg)    
})

这很奇怪,因为如果我在 window1 工作中做同样的事情。 这是我调用 IpcMain 的 window1 的代码

const { ipcRenderer } = require("electron");

ipcRenderer.send('fromRenderer1','hi from renderer1');

【问题讨论】:

    标签: electron ipc ipcrenderer


    【解决方案1】:

    您需要等待window2 加载,然后才能向其发送任何内容。所以请确保它返回一个承诺。

    设置一个did-finish-load 监听器并在其中解析promise。

    主要

    // Keep global references so they don't get garbage collected
    let window2
    
    // Create listener for renderer-1
    ipcMain.on('from-renderer-1', (event, payload) => {
      createWindow2()
        .then(() => {
          window2.webContents.send('message-1', payload)      
        })
    })
    
    // Create 'reply' listener for renderer-1
    ipcMain.on('message-1-reply', (event, data) => {
      window1.webContents.send('message-1-reply-for-renderer-1', data)
      if (window2) {
        window2.close()
      }
    })
    
    function createWindow2 () {
      return new Promise((resolve, reject) => {
        const developmentPath = `${process.env.WEBPACK_DEV_SERVER_URL}/window2.html`
        const productionPath = 'app://./window2.html'
        window2 = new BrowserWindow({ ... })
        // Load window URL
        if (process.env.WEBPACK_DEV_SERVER_URL) {
          window2.loadURL(developmentPath)
        } 
        else {
          window2.loadURL(productionPath)
        }
        // Create 'close' listener
        window2.on('closed', () => {
          window2 = null
        })
        // Create 'did-finish-load' listener 
        window2.webContents.on('did-finish-load', () => {
          resolve()
        })
      })
    }
    

    【讨论】:

      猜你喜欢
      • 2018-12-29
      • 2018-05-15
      • 1970-01-01
      • 2021-08-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-29
      • 2019-02-20
      • 1970-01-01
      相关资源
      最近更新 更多