Electron.remote 未定义

Electron.remote is undefined

我在使用 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();

我不知道我错过了什么。任何建议将不胜感激。

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

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

原回答:

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

渲染过程:

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

主要流程:

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

在electron 10.0.0中,默认设置remoteModule false。所以,如果你想在 JavaScript 文件中使用 const {BrowserWindow, dialog } = require('electron').remote;,那么你必须将 enableRemoteModule 设置为 webPreferences.

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

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

remote 有时在 electron 中变得未定义所有你需要做的就是去你的 main.js 并在创建 window 下添加以下对象webPreference set enableRemoteModule: true 如下所示那么你的问题就解决了

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

我启用了远程模块,仍然得到

index.html:43 Uncaught TypeError: Cannot read properties of undefined (reading 'getCurrentWindow')

const remote = require('electron').remote;

(或)

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

正在使用

remote.getCurrentWindow().close();

我确实添加了

webPreferences: {
            nodeIntegration: true,
            contextIsolation: false,
            enableRemoteModule: true,
    }

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()