开发者问题收集

Electron.remote 未定义

2016-06-17
66996

我在使用 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个回答

更新 2020 ,因为这个答案仍然出现在顶部。为了使原始答案在当前版本的 Electron 中工作,您需要在主进程中创建窗口时设置 enableRemoteModule

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

原始答案:

remote 仅在需要渲染进程内部的其他模块时才需要。在主进程中,您只需直接从 require('electron') 获取模块即可。在示例中,它看起来像是只添加了 remote

渲染过程:

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

主进程:

const { BrowserWindow } = require('electron');
Max
2016-06-18

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

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

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

Yumick Gharti
2020-08-27

remote 模块在 Electron 12 中已弃用,并将在 Electron 14 中删除。它由 @electron/remote 模块取代。

// Deprecated in Electron 12:
const { BrowserWindow } = require('electron').remote
// Replace with:
const { BrowserWindow } = require('@electron/remote')

// In the main process:
require('@electron/remote/main').initialize()
Ha0ran
2021-10-05