Electron和窗口之间的IPC通信不工作

4

我正在尝试编写我的第一个基于Electron Boilerplate的Electron应用程序。我试图从主要的Electron进程向我的窗口发送一条简单的消息,但似乎消息没有被发送。

我实现的主要代码如下:

background.js(主Electron进程)

// 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');
  }
});

app.js(目标映射到主窗口)

import { ipcRenderer } from "electron";

ipcRenderer.on('test', (event, text) => { console.log("Received test 
message:", text)});
console.log(ipcRenderer);

有什么想法为什么事件没有被接收?我看到控制台日志显示DEV代码正在运行,但应用程序窗口侧面上没有任何内容(在开发者控制台日志中)。完整的代码可以在Git Repo找到。非常感谢您的帮助。
谢谢 Oliver
1个回答

11

谢谢回复。但是代码正在app.on('ready')中运行,我认为这意味着渲染器已经准备好了。(我修复了格式,以使它更清晰地在该部分中) - Oliver
不要混淆“应用程序实例准备就绪”和“渲染器实例就绪”之间的区别。它们是不同的概念。你可以让你的应用程序实例准备就绪,但这并不意味着你的渲染器上下文已经就绪。 - OJ Kwon
抱歉,我没有看到你在代码中所做的更改(我早上检查过了)。我尝试添加你建议的代码,最终它起作用了。非常感谢你的帮助。 - Oliver

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接