问题描述
我正在尝试在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 非常危险。