Javascript Electron Remote(关闭、最小化等)不工作(无法读取未定义的属性';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

我正在尝试在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();
}
我还将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
调用之外,没有办法解决这个问题(很抱歉响应太晚)。