Electron.remote未定义

时间:2016-06-17 14:28:15

标签: node.js electron

使用Electron时遇到问题。正如你可以看到标题,当我加载远程模块时,它说它是未定义的。这是条目js:

的代码
const electron = require('electron');
const { app, BrowserWindow, Tray, remote, ipcMain } = electron;

function initApp() { ... }

app.on('ready', () => {
    initApp();

    console.log(electron);         // object, but no remote inside
    console.log(electron.remote);  // undefined
    console.log(remote);           // undefined
});

我尝试按照官方文档:http://electron.atom.io/docs/api/remote/

const { remote } = electron;
const { BrowserWindow } = remote;

let win = new BrowserWindow({width: 800, height: 600});  // error! BrowserWindow is not a constructor blabla

...
remote.getCurrentWindow().focus();

我不知道自己错过了什么。任何建议都会非常感激。

3 个答案:

答案 0 :(得分:46)

在电子10.0.0中,remoteModule默认设置为false。因此,如果要在JavaScript文件中使用const {BrowserWindow, dialog } = require('electron').remote;,则必须在enableRemoteModule中将true设置为webPreferences

const w = new BrowserWindow({
    webPreferences: {
        enableRemoteModule: true
    }
}); 

链接:https://github.com/electron/electron/blob/master/docs/breaking-changes.md#default-changed-enableremotemodule-defaults-to-false

答案 1 :(得分:7)

remote只需要在渲染过程中需要其他模块。在主要过程中,您只需直接从require('电子')获取模块。 remote的示例中完成了它。

渲染过程:

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

主要流程:

const { BrowserWindow } = require('electron');

答案 2 :(得分:2)

有时在电子中

remote 变得不确定,您要做的就是转到main.js并在webPreference set enableRemoteModule下创建窗口的同时添加以下对象:true 如图所示,那么您的问题将得到解决

 win = new BrowserWindow({
    width: 700,
    height: 600,
    hasShadow: true,
    webPreferences: {
      nodeIntegration: true,
      enableRemoteModule: true,
     },
  });