- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习Electron和更多的 Node ,但是每次与IPC Renderer交互时,我总是遇到错误。
render.js:6 Uncaught ReferenceError: Cannot access 'ipc' before initialization
at updateRP (render.js:6)
at HTMLButtonElement.onclick (index.html:11)
据我从各种论坛上了解到的,当我将nodeIntergation添加到我的主流程中时,该问题应该已经得到解决。我真的很困惑,对此的任何帮助将不胜感激。
<html>
<head>
<meta charset="UTF-8">
<title>Hello World!</title>
<link rel="stylesheet" href="index.css">
</head>
<body>
<h1>💖 Hello World!</h1>
<p>Welcome to your Electron application.</p>
<button onclick="updateRP()">Update RP</button>
<script type="text/javascript" src="render.js"></script>
</body>
</html>
主要的
const { app, BrowserWindow } = require('electron');
const { ipcMain } = require('electron');
const ipc = require('electron').ipcMain;
const path = require('path');
const client = require('discord-rich-presence')('745419354375454901');
client.updatePresence({
state: 'slithering',
details: '🐍',
startTimestamp: Date.now(),
endTimestamp: Date.now() + 1337,
largeImageKey: 'snek_large',
smallImageKey: 'snek_small',
instance: true,
});
// Handle creating/removing shortcuts on Windows when installing/uninstalling.
if (require('electron-squirrel-startup')) { // eslint-disable-line global-require
app.quit();
}
const createWindow = () => {
// Create the browser window.
const mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true
}
});
// and load the index.html of the app.
mainWindow.loadFile(path.join(__dirname, 'index.html'));
// Open the DevTools.
};
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', createWindow);
// Quit when all windows are closed, except on macOS. There, it's common
// for applications and their menu bar to stay active until the user quits
// explicitly with Cmd + Q.
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit();
}
});
app.on('activate', () => {
// On OS X it's common to re-create a window in the app when the
// dock icon is clicked and there are no other windows open.
if (BrowserWindow.getAllWindows().length === 0) {
createWindow();
}
});
ipcMain.on("UpdateRP", stateForRP =>{
client.updatePresence({
state: stateForRP,
details: 'test',
startTimestamp: Date.now(),
endTimestamp: Date.now() + 1337,
largeImageKey: 'logo',
smallImageKey: 'profilepic',
instance: true,
});
});
使成为
const {ipcRenderer} = require('electron')
const ipc = electron.ipcRenderer;
function updateRP(){
var stateForRP = "Test";
ipc.send("UpdateRP", stateForRP);
}
最佳答案
至少可以说,在提供的代码中,由require ('electron')
返回的对象的destructuring assignment的处理方式很奇怪。
在渲染器中:
const {ipcRenderer} = require('electron')
const ipc = electron.ipcRenderer; // The variable *electron* has never been defined!
应该:
const electron = require('electron');
const ipc = electron.ipcRenderer;
或者:
const { ipcRenderer } = require('electron');
const ipc = ipcRenderer;
或者:
const { ipcRenderer: ipc } = require('electron');
同样,在
主中:
const { app, BrowserWindow } = require('electron');
const { ipcMain } = require('electron');
const ipc = require('electron').ipcMain;
可以重写为:
const { app, BrowserWindow, ipcMain } = require('electron');
const ipc = ipcMain;
或更简而言之:
const { app, BrowserWindow, ipcMain: ipc } = require('electron');
[更新]
mainWindow
变量必须是全局变量,这样它的值才不会被垃圾收集...
const createWindow = () => {
// Create the browser window.
const mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true
}
});
// and load the index.html of the app.
mainWindow.loadFile(path.join(__dirname, 'index.html'));
// Open the DevTools.
};
使用:
let mainWindow;
const createWindow = () => {
// Create the browser window.
mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true
}
});
// and load the index.html of the app.
mainWindow.loadFile(path.join(__dirname, 'index.html'));
// Open the DevTools.
};
关于javascript - 渲染过程中IPCRenderer的 Electron 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63825332/
我的渲染过程中有以下内容: class Component { findClosestComponent(c) { /* Do stuff */ } } class Item extends
您好,我正在使用 Electron 和 React 开发一个项目, 我在 react 端有一个表单,在提交时调用 ipcRenderer.on 一个 ipcRenderer.send 方法。 我在为表
我正在尝试使用 IPC 在我的 react 组件和主 Electron 过程之间进行通信。 In component : export default class A extends React.Co
我可以看到“来自渲染器的你好”警报,但看不到“来自渲染器的再见”警报。 在 Windows 10 中运行。 而且我看不到“已收到!”警报,我应该看到 ipcRenderer.on(...) 起作用了。
我有一个带有构造函数和异步函数的类。 我已经完成了module.exports这样我就可以从我的 GUI.js 调用我的类(class)文件和我的GUI.js文件,我需要那个类,一切正常。 但是在我的
我正在做我的第一个 Electron 应用程序-使用Git中的 Electron 快速启动代码。 我无法将事件从preload.js发送到main.js 我成功地将邮件从main.js发送到prelo
所以显然使用 remote 是一种不好的做法。 Electron 中的模块,他们正计划杀死它。他们说ipcRenderer应该使用模块。 但是ipc的东西是一个事件系统。 如果在预加载脚本中我需要从主
我正在(第一次)使用 Electron 创建一个仅限 Mac 的小型应用程序。 我正在尝试使用 ipcRenderer 在我的应用程序菜单和主 BrowserWindow 中的内容之间进行通信。 我将
我有一个使用 Electron、React 和 React Router 的应用程序。我在组件构造函数中使用 ipcRenderer 将事件从组件发送到主 Electron 进程。将 React Ro
我正在使用 Electron + Vue 来构建我的应用程序。我向主进程发送一条消息以创建一个新窗口。在 main 的方法中,我试图将消息传递给新创建的窗口,但它不起作用。 我在主浏览器窗口中的 Ho
在我的主机应用程序中,我有一个按钮,单击该按钮后,会将数据连同数据一起发送到我的 Angular 应用程序。像这样: Send Some Data 组件: onClick() { ipcRender
我正在尝试做一个简单的 ipc.send 和 ipc.on 但由于某种原因我在这个 Electron 需求上变得不确定。 库/自定义菜单.js: 'use-strict'; const Browser
我想知道如何在 Electron 应用程序上通过 ipcRenderer 发送多个参数。我应该发送一个参数数组还是只发送用逗号分隔的所有参数? 谢谢, 最佳答案 我会推荐一个用于参数传输的对象。因此,
我正在尝试了解 Electron 主进程和渲染器进程之间的通信。文档 https://github.com/electron/electron/blob/master/docs/api/remote.
我正在使用 Electron 在我的 Ionic React 应用程序上制作桌面版本。我已经决定闪屏只会在 React 应用程序说它可以消失时才会消失。 在 index.ts (主要的 Electro
嗨,我是从ipcRenderer.send()文件中调用index.html的。 我想做的是将函数调用延迟5秒。但是,它似乎不起作用。 这实际上是我想要做的:setTimeout(ipcRendere
这是情况。 可通过main.js中的nodejs(node-adodb)直接访问该数据库。我的Angular应用发送请求并从db.service接收sql结果。这部分工作正常,但是如果我有一个类似ge
我正在尝试将消息从模式发送回浏览器窗口,以便使用从模式返回的数据更新它。 模态有一个表格,当您点击一行时,行 ID 通过 ipcRenderer 消息发送,但消息似乎没有到达那里,因为控制台中没有记录
我正在用 Electron js 编写一个桌面应用程序,我想将数据从我的主进程发送到我的渲染器进程,反之亦然。为此,我使用 ipcMain和 ipcRenderer ,但很奇怪,同时能够通过我的渲染器
使用 Electron、React (es6/jsx)、sass、pouchdb 和 webpack 2 设置。我无法导入或需要 ipcRenderer 来使主进程和渲染器进程之间的通信成为可能。我的
我是一名优秀的程序员,十分优秀!