IPC通信在电子和窗口

时间:2018-01-22 15:00:30

标签: electron

我正在尝试编写我的第一个基于Electron Boilerplate的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');
  }
});

app.js(窗口映射到mainWindow)

import { ipcRenderer } from "electron";

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

知道为什么没有收到这个活动?我在控制台日志中看到DEV代码正在运行,但在应用程序窗口一侧没有任何内容(在开发人员控制台日志中)可以在Git Repo找到完整的代码

任何帮助都将不胜感激。

由于 奥利弗

1 个答案:

答案 0 :(得分:3)

如文档所示(https://github.com/electron/electron/blob/master/docs/api/web-contents.md#contentssendchannel-arg1-arg2-),一旦渲染器准备好收听,发送消息非常重要。

if(isDev()){
    mainWindow.openDevTools();
    mainWindow.setIgnoreMouseEvents(false);
    console.log("======== DEV ==========");
    mainWindow.show();
    // send after did-finish-load
    mainWindow.webContents.on('did-finish-load', () => {
      mainWindow.webContents.send('test','This is a test');
    })
  }