Javascript Electron Remote(关闭、最小化等)不工作(无法读取未定义的属性';getCurrentWindow')
我正在尝试在Electron JS应用程序的无框窗口中添加关闭和最小化按钮。但它无论如何都不起作用。它总是显示“无法读取未定义的属性“getCurrentWindow”错误。这是我的密码:Javascript Electron Remote(关闭、最小化等)不工作(无法读取未定义的属性';getCurrentWindow'),javascript,electron,electron-builder,electron-packager,Javascript,Electron,Electron Builder,Electron Packager,我正在尝试在Electron JS应用程序的无框窗口中添加关闭和最小化按钮。但它无论如何都不起作用。它总是显示“无法读取未定义的属性“getCurrentWindow”错误。这是我的密码: const {remote} = require('electron'); document.getElementById('minimize').onclick = function() { var window = remote.getCurrentWindow(); window.mi
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();
}
我还将webPreferences:{nodeIntegration:true}添加到main.js中
win = new BrowserWindow({width: 990, height: 660, title: "Okkhor52 Tools", show: false, resizable: false, frame: false, webPreferences: {nodeIntegration: true}});
win = new BrowserWindow({
width: 990,
height: 660,
title: "Okkhor52 Tools",
resizable: false,
frame: false,
webPreferences: {
nodeIntegration: true,
enableRemoteModule: true
}
});
请给我一个解决方案,我试图在很多地方找到这个问题的解决方案,但我没有得到确切的解决。解决很容易。只需在main.js的浏览器窗口中添加
webPreferences:{enablemotemodule:true}
win = new BrowserWindow({width: 990, height: 660, title: "Okkhor52 Tools", show: false, resizable: false, frame: false, webPreferences: {nodeIntegration: true}});
win = new BrowserWindow({
width: 990,
height: 660,
title: "Okkhor52 Tools",
resizable: false,
frame: false,
webPreferences: {
nodeIntegration: true,
enableRemoteModule: true
}
});
除了
enablemotemodule:true
之外,您需要在webPreference中添加nodeIntegration:true
,否则如果您从其他javascript调用electron(如const{remote}=require('electron');
)它将不起作用。如果您已经将enableRemoteModule
设置为true,并且仍然存在此问题,则很可能是您在主进程中需要,或者需要一个需要它的文件,至少对我来说是这样。远程模块在主进程内不是必需的,仅用于渲染器进程
如果您需要或需要在主进程中使用require(“electron”).remote.getCurrentWindow()
的另一个javascript文件,则会出现此错误
解决这个问题的方法很简单,就是不要在主进程中以任何方式包含该代码。实际上,从安全角度来看,我建议您应该使用:
win = new BrowserWindow({
width: 990,
height: 660,
title: "Okkhor52 Tools",
resizable: false,
frame: false,
webPreferences: {
nodeIntegration: false, //default
enableRemoteModule: true,
preload: path.join(__dirname, 'preload.js')
}
}));
并将js代码放入“preload.js”
根据官方文件,nodeIntergration:true非常危险。您使用的是哪个电子版本?如果10,你在这里找到答案非常感谢,它的工作我有一个文件处理我的ipcMain.on调用。我需要main.js文件中的该文件。我猜这可能就是我犯这个错误的原因。但是,我需要访问main.js文件之外的main窗口,这就是我尝试访问remote的原因。我对电子相当陌生。“你能帮忙吗?”大卫西安我对电子也相当陌生,但我会看看是否能帮忙。只要使用
remote
,在main.js
外部访问main窗口应该不会有问题。但是,在main.js
中需要一个需要ipcMain
的文件(它将使用remote
,因为它不是主文件)将导致错误。不幸的是,据我所知,除了在main.js
文件中处理ipcMain.on
调用之外,没有办法解决这个问题(很抱歉响应太晚)。