我正在尝试做一个简单的ipc.send和ipc.on,但由于某些原因,我对这个电子需求没有定义。
库/定制menu.js:
'use-strict';
const BrowserWindow = require('electron').BrowserWindow;
const ipcRenderer = require('electron').ipcRenderer;
exports.getTemplate = function () {
const template = [
{
label: 'Roll20',
submenu: [
{
label: 'Player Handbook',
click() {
console.log('test');
},
},
],
},
{
label: 'View',
submenu: [
{
label: 'Toggle Fullscreen',
accelerator: 'F11',
click(item, focusedWindow) {
if (focusedWindow) {
focusedWindow.setFullScreen(!focusedWindow.isFullScreen());
}
},
},
{
label: 'Toggle Developer Tools',
accelerator: (function () {
if (process.platform === 'darwin') {
return 'Alt+Command+I';
}
return 'Ctrl+Shift+I';
}()),
click(item, focusedWindow) {
if (focusedWindow) {
focusedWindow.toggleDevTools();
}
},
},
{
label: 'Reload',
accelerator: 'F5',
click() {
BrowserWindow.getFocusedWindow().reloadIgnoringCache();
},
},
],
},
{
label: 'Random Generators',
submenu: [
{
label: 'World Generator',
click() {
ipcRenderer.send('show-world');
},
},
],
},
];
return template;
};
错误是 无法读取undefined的属性'send'。
答案 0 :(得分:3)
BrowserWindow
模块仅在主进程中可用,ipcRenderer
模块仅在渲染器进程中可用,因此无论您在哪个进程中运行此代码都无法正常工作。我猜是因为ipcRenderer
不可用,所以你试图在主过程中运行这段代码。
答案 1 :(得分:1)
我知道这个答案对您来说可能已经太迟了,但对其他人而言
如果您尝试从渲染器进程访问任何主进程模块,则需要通过远程模块,
const {BrowserWindow} = require('electron').remote
请参阅文档remote
答案 2 :(得分:0)
仅适用于那些无法在react app ipcRenderer或任何需要预加载文件的环境中工作的人。
答案 3 :(得分:-1)
这些行对我有用:
app.commandLine.appendSwitch('ignore-certificate-errors', 'true')
app.commandLine.appendSwitch('allow-insecure-localhost', 'true')
答案 4 :(得分:-1)
在renderer进程中,带有“require”语句的script标签需要是:
<script type="javascript"></script>
在没有类型集的脚本标签中调用 require 是行不通的。