电子需要ipcRenderer无法正常工作

时间:2016-03-05 09:48:30

标签: electron

我正在尝试做一个简单的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'。

5 个答案:

答案 0 :(得分:3)

BrowserWindow模块仅在主进程中可用,ipcRenderer模块仅在渲染器进程中可用,因此无论您在哪个进程中运行此代码都无法正常工作。我猜是因为ipcRenderer不可用,所以你试图在主过程中运行这段代码。

答案 1 :(得分:1)

我知道这个答案对您来说可能已经太迟了,但对其他人而言

如果您尝试从渲染器进程访问任何主进程模块,则需要通过远程模块,

const {BrowserWindow} = require('electron').remote

请参阅文档remote

答案 2 :(得分:0)

仅适用于那些无法在react app ipcRenderer或任何需要预加载文件的环境中工作的人。

preload setup

答案 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 是行不通的。