Electron中require ipcRenderer无法工作

8

我尝试进行简单的ipc.send和ipc.on通信,但某些原因导致electron require返回undefined。

libs/custom-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;
};

错误信息为无法读取未定义的属性“send” 。
5个回答

6
BrowserWindow 模块仅在主进程中可用,ipcRenderer 模块仅在渲染进程中可用,因此无论您在哪个进程中运行此代码,它都不会起作用。我猜测由于 ipcRenderer 不可用,您正尝试在主进程中运行此代码。

嘿,你介意看一下我的非常相似的问题吗? - oldboy

1
我知道这个答案可能对你来说有些晚了,但对其他人来说可能有用。
如果您正在尝试从渲染器进程访问任何主进程模块,则需要通过远程模块进行。
const {BrowserWindow} = require('electron').remote

查看文档 remote


0

仅适用于那些无法在React应用程序ipcRenderer或任何需要preload文件的环境中使其正常工作的人。

预加载设置


-1

以下代码对我有效:

app.commandLine.appendSwitch('ignore-certificate-errors', 'true') 
app.commandLine.appendSwitch('allow-insecure-localhost', 'true')


-2
在渲染进程中,具有“require”语句的脚本标签需要是: <script type="javascript"></script> 在没有设置类型的情况下,在脚本标签中调用require是无效的。

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