Reputation: 81
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
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