开发者问题收集

电子遥控器未定义,且 enableremotemodule = true

2021-06-26
2880

我尝试使用对话框与 "electron": "^13.1.4" ,但出现错误 Uncaught TypeError: Cannot read property 'dialog' of undefined. ,即使我设置了 enableremotemodule = true

const electron = require('electron');
const app = electron.app;
const BrowserWindow = electron.BrowserWindow;
......
......

mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
        contextIsolation: false,
        enableremotemodule: true,
        nodeIntegration: true,
    }
});

这是调用电子遥控器并得到未定义的代码

import { OpenDialogOptions, remote } from 'electron';
.......
.......
openFile() {
    let options: OpenDialogOptions = {};
    console.log(remote); // log undefined
    remote.dialog.showOpenDialog(options).then((filePath) => {
        console.log(filePath);
    });
}
2个回答

什么是 OpenDialogOptions ,electron 文档中没有此项目 尝试使用

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

并将 main.js 中的大小写更改为 enableRemoteModule: true

请参阅此 electron 的对话框文档

Dinesh s
2021-06-26

如果您使用的是 elect 14.0 或更高版本,则 remote 不再是核心 electron 的一部分,但您可以包含

const {dialog} = require('@electron/remote');

您还应该在主进程中初始化 remote,并允许您的窗口执行 remote

在您的主进程中执行此操作

require("@electron/remote/main").initialize();
const mainRemote = require("@electron/remote/main");
mainRemote.enable(win.webContents);

在您的渲染器进程中

const remote = window.require("@electron/remote");
const { getCurrentWebContents, getCurrentWindow, dialog } = remote;

const webContents = getCurrentWebContents();
const currentWindow = getCurrentWindow();

//now show your dialog
   const response = dialog.showMessageBoxSync(currentWindow, {
        buttons: ["Yes", "No"],
        message: "Do you really want to save?",
        title: "Confirm order"
      });

注意:enableRemoteModule 在 electron 版本 >= 14.0 中不再有效

参考

Gpak
2021-11-26