电子遥控器关闭,最小化等不起作用无法读取未定义的属性“ getCurrentWindow”

问题描述

我正在尝试在Electron JS应用程序的无框窗口中添加关闭和最小化按钮。但是它无论如何都不起作用。总是显示“无法读取未定义的属性'getCurrentWindow'”错误。这是我的代码:

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

document.getElementById('minimize').onclick = function() {
    var window = remote.getCurrentWindow();
    window.minimize();
}

document.getElementById('close').onclick = function() {
    var window = remote.getCurrentWindow();
    window.close();
}

我还在main.js中添加了webPreferences:{nodeIntegration:true}。

win = new BrowserWindow({width: 990,height: 660,title: "Okkhor52 Tools",show: false,resizable: false,frame: false,webPreferences: {nodeIntegration: true}});

请给我一个解决方案,我试图在很多地方找到这个问题的解决方案,但我没有得到确切的解决方案。

解决方法

解决非常容易。只需在main.js的BrowserWindow中添加webPreferences: {enableRemoteModule: true}

win = new BrowserWindow({
    width: 990,height: 660,title: "Okkhor52 Tools",resizable: false,frame: false,webPreferences: {
        nodeIntegration: true,enableRemoteModule: true
    }
}); 

enableRemoteModule: true旁边,您需要在webPreference中添加nodeIntegration: true,否则,如果您从其他人的javascript中调用电子(例如const {remote} = require('electron');),则将无法正常工作。

,

如果您已经将enableRemoteModule设置为true并且仍然存在此问题,则很可能是您需要the remote module,或者需要一个需要它的文件 ,至少对我来说就是这种情况。远程模块在主进程内部不是必需的,而仅在渲染器进程中使用。

如果您需要或需要另一个在主进程中使用require("electron").remote.getCurrentWindow()的javascript文件,则会出现此错误。

只需在主进程中不包含任何代码即可解决此问题。

,

其实从安全的角度来说,我建议你应该使用:

win = new BrowserWindow({
width: 990,webPreferences: {
    nodeIntegration: false,//default 
    enableRemoteModule: true,preload: path.join(__dirname,'preload.js')
}

}); 并将您的 js 代码放入“preload.js”中。

根据官方文档 Disable the Node.js integration in all renderers that display remote content,nodeIntergration: true 非常危险。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...