标签: ipcmain

为什么我的 ipcMain 没有发送到 Electron 中的 ipcRenderer?

电子新手我已经弄清楚如何从Renderer发送到Main,但我正在尝试学习如何从MainRenderer。在我的研究中,我读到:

IPC 从主进程发送到渲染器并尝试:

main.js

const { app, ipcMain, Menu }  = require('electron')
const appVersion = process.env.npm_package_version
const mainWindow = require('./renderer/mainWindow')

app.on('ready', () => {
  mainWindow.createWindow(),
  console.log(`Trying to send app version to renderer: ${appVersion}`),
  mainWindow.webContents.send('app-version', appVersion),  
  Menu.setApplicationMenu(mainMenu)
})
Run Code Online (Sandbox Code Playgroud)

但我收到错误:

未捕获的异常类型错误无法读取未定义的属性“发送”

阅读“从 IpcMain 发送同步消息到 IpcRenderer - Electron ”后,我尝试了:

ipcMain.on('app-version', (event) => {
    console.log(`Sent: ${appVersion}`)
    event.sender.send(appVersion)
}),
Run Code Online (Sandbox Code Playgroud)

但没有任何反应或错误。我的渲染器.js

const { ipcRenderer } = require('electron')
ipcRenderer.on('app-version', (event, res) => {
    console.log(res) …
Run Code Online (Sandbox Code Playgroud)

javascript ipc electron ipcmain ipcrenderer

6
推荐指数
1
解决办法
2万
查看次数

如何将 ipcMain.on() 函数与 main.js 中的不同文件分开

我正在创建一个以 vuejs 作为前端的电子应用程序。如何在 main.js 的单独文件中创建所有 ipcMain.on() 函数。我希望这是一个更干净的代码结构。

该应用程序必须离线工作,因此我需要将数据存储在本地数据库中。因此,当我在前端创建一个对象时,我将它与 ipcMain 发送到电子端。然后 Electron 可以将其写入本地数据库。

我想要这样的东西:

main.js:

import { app, protocol, BrowserWindow } from "electron";
import {
  createProtocol,
  installVueDevtools
} from "vue-cli-plugin-electron-builder/lib";

require("./ipcListeners.js");
Run Code Online (Sandbox Code Playgroud)

ipcListeners.js:

import { ipcMain } from "electron";

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

ipcMain.on("random-message", (event, arg) => {
  console.log(arg);
  event.reply("random-reply", "random");
});

Run Code Online (Sandbox Code Playgroud)

这里的问题是只有第一个 ipcMain.on() 函数起作用,但第二个函数......不起作用

vue.js electron ipcmain

6
推荐指数
1
解决办法
5480
查看次数

Electron ipc消息是有序的吗?

Electron 中的 ipc 消息有顺序保证吗?如果有,它们是什么?

例如,在 main 中:

window.webContents.send('channel-a', 1)
window.webContents.send('channel-a', 2)
Run Code Online (Sandbox Code Playgroud)

在渲染器中:

ipcRenderer.on('channel-a', (_event, num) => console.log(num))
Run Code Online (Sandbox Code Playgroud)

消息是否始终按顺序传递到渲染器(例如上例中 1 在 2 之前)?

如果是这样,如果消息位于不同的通道上,它们是否也总是有序的(例如,通过更改channel-achannel-b上面的某一行)?

ipc electron ipcmain ipcrenderer

6
推荐指数
0
解决办法
285
查看次数

如何区分一个ipc main(同一通道)中的两个ipc渲染器

我想检测特定的框架/浏览器窗口。我有一个主进程和两个浏览器窗口,这三个窗口都使用同一通道相互发送消息。在 IPCMain 中我需要检测其中之一。我看到 IPCmain 事件有一个名为frameId 的函数,但是当我使用它时,我得到了未定义。

ipcMain.once("postMessage", (event, message) => {
    if(!activeRequest) return;
    activeRequest.json(message).send();
});
Run Code Online (Sandbox Code Playgroud)

ipc electron ipcmain

4
推荐指数
1
解决办法
2456
查看次数

标签 统计

electron ×4

ipcmain ×4

ipc ×3

ipcrenderer ×2

javascript ×1

vue.js ×1