Saadalla
Saadalla

Reputation: 81

ipcRenderer.send and sendSync are not working from preload to main

I am doing my first electron app - using electron-quick-start code from Git. I am not able to send events from preload.js to main.js

I managed to send messages from main.js to preload.js successfully - using mainWindow.webContents.send in main.js and ipcRenderer.on in preload.js. I am having trouble doing it the other way round.

Note that resize events works fine and received normally in main.js

preload.js:

const {ipcRenderer} = require('electron')

window.addEventListener('DOMContentLoaded', () => {

  // Wait for button click to send event
  const button = document.getElementById('clickme');
  button.addEventListener('click', (event) =>{
      console.log('Preload.Click')
      // Send Async - Trial #1 - NOT WORKING !!!!!
      ipcRenderer.send('asynchronous-message', 'ping')

  })
  console.log("preload.js DOMContentLoaded");
})



main.js:

const {app, BrowserWindow, dialog} = require('electron')
const path = require('path')

app.on('ready', createWindow)

// Never gets Called  - WHY !!!!
app.on('asynchronous-message', (event, arg) => {
  console.log('asynchronous-message received ')
  // event.sender.send('asynchronous-reply', 'pong')
})

let mainWindow

console.log("\nmain.js starts");

function createWindow () {
  // Create the browser window.
  mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      preload: path.join(__dirname, 'preload.js'),
      nodeIntegration: true
    }
  })
  mainWindow.loadFile('index.html')
  mainWindow.webContents.openDevTools()
  mainWindow.on('closed', function () {
    mainWindow = null
  })

  console.log("listen mainWindow.on('resize') >> works");
  mainWindow.on('resize', (event, text) => {
    console.log("resize ", mainWindow.getSize());
  });
} // createWindow

I was expecting the ipcRenderer.send in preload.js to trigger the event 'on' in main.js displaying the message: 'asynchronous-message received'. - Never happens.
I tried sendSync - it hangs the preload.js program.
What am i doing wrong ?

Thanks

Upvotes: 3

Views: 5128

Answers (1)

parse
parse

Reputation: 1922

Yes, because ipcMain which needs to be listening to asynchronous-message event not app!

Your main.js should be like this:

const { app, BrowserWindow, dialog, ipcMain } = require("electron");
const path = require("path");

app.on("ready", createWindow);

// app.on("asynchronous-message", (event, arg) => {// Wrong

ipcMain.on("asynchronous-message", (event, arg) => {
    console.log("asynchronous-message received ");
    // event.sender.send('asynchronous-reply', 'pong')
});

let mainWindow;

console.log("\nmain.js starts");

Upvotes: 4

Related Questions