在我的主要过程中,我创建了一个渲染器窗口:
var mainWindow = new BrowserWindow({
height: 600,
width: 800,
x: 0,
y: 0,
frame: false,
resizable: true
});
mainWindow.openDevTools();
mainWindow.loadURL('file://' + __dirname + '/renderer/index.html');
Run Code Online (Sandbox Code Playgroud)
然后我想以某种方式与它沟通:
mainWindow.webContents.send('message', 'hello world');
Run Code Online (Sandbox Code Playgroud)
但是,主窗口不会收到此消息,因为在我尝试发送它时未完全创建它.
我通过将后一个代码包装在setTimeout()中暂时解决了这个问题,但这绝对不是解决竞争条件的正确方法.
主窗口准备就绪时是否有回调?我尝试了文档中提到的"准备展示"活动,但它没有用.
在电子中,可以通过IpcRenderer向IpcMain发送同步消息ipcRenderer.sendSync('synchronous-message', 'ping').
也可以使用从IpcMain向IpcRenderer 发送异步消息window.webContents.send('ping', 'whoooooooh!')
但有没有办法从IpcMain 发送同步消息到IpcRenderer?
我正在尝试编写基于电子样板的第一个电子应用程序。我正在尝试将一个简单的消息从Electron主进程发送到我的窗口中,但是似乎该消息没有得到发送。
我已经介绍过的主要代码如下
background.js(主要电子过程)
// Window setup
app.on("ready", () => {
mainWindow = new BrowserWindow({
width: 1000,
height: 300,
frame: false,
resizable: false,
transparent: true,
});
mainWindow.setIgnoreMouseEvents(true);
mainWindow.hide();
mainWindow.loadURL(
url.format({
pathname: path.join(__dirname, "app.html"),
protocol: "file:",
slashes: true
})
);
const ret = globalShortcut.register(getKeyboardShortCut(), () => {
mainWindow.isVisible ? mainWindow.hide() : mainWindow.show();
})
if(isDev()){
mainWindow.openDevTools();
mainWindow.setIgnoreMouseEvents(false);
console.log("======== DEV ==========");
mainWindow.show();
mainWindow.webContents.send('test','This is a test');
}
});
Run Code Online (Sandbox Code Playgroud)
app.js(将窗口映射到mainWindow)
import { ipcRenderer } from "electron";
ipcRenderer.on('test', (event, text) => { console.log("Received test
message:", text)}); …Run Code Online (Sandbox Code Playgroud)