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