首先,我知道这是一个只有初学者才会问的问题,但是在经历了 50 多种不同的解决方案、卸载 npm 和安装 yarn 之后,我不得不问这个令人难以置信的愚蠢问题。
为什么这不起作用?
我想使用 ElectronJS 实现一个简单的标题栏,我遇到的问题是按钮(关闭/最小化/最大化)不起作用。我收到的错误如下:
最小化错误:titlebar.js:16 Uncaught TypeError: Cannot read property 'BrowserWindow' of undefined at HTMLButtonElement.maximizeApp (titlebar.js:16)
最大化错误:titlebar.js:16 Uncaught TypeError: Cannot read property 'BrowserWindow' of undefined at HTMLButtonElement.maximizeApp (titlebar.js:16)
退出错误:titlebar.js:21 Uncaught TypeError: Cannot read property 'getCurrentWindow' of undefined at HTMLButtonElement.quitApp (titlebar.js:21)
我用来控制它的 JavaScript 文件称为 titlebar.js。就是这个:
const remote_v = require("electron").remote;
var minimize_v = document.getElementById("minimize");
var maximize_v = document.getElementById("maximize");
var quit_v = document.getElementById("quit");
minimize_v.addEventListener("click",minimizeApp);
maximize_v.addEventListener("click",maximizeApp);
quit_v.addEventListener("click",quitApp);
function minimizeApp(){
remote_v.BrowserWindow.getFocusedWindow().minimize();
}
function maximizeApp(){
remote_v.BrowserWindow.getFocusedWindow().maximize();
}
function quitApp(){
remote_v.getCurrentWindow().close();
}
由于许多针对此类其他问题的修复都在渲染过程中,因此这是 HTML 文件:<!DOCTYPE html>
<head>
<title>Visionizer</title>
<link rel="stylesheet" href="css/editor.css">
<link rel="stylesheet" href="css/titlebar.css" >
</head>
<body>
<div class="container">
<div class="titlebar titlebarStyle">
<div class="windowTitle"> Visionizer </div>
<div class="windowControls windowControlsStyle">
<button id="minimize">-</button>
<button id="maximize">[]</button>
<button id="quit">x</button>
</div>
</div>
<div class="editorScreen">
</div>
</div>
<script src="js/titlebar.js"></script>
</body>
</html>
奇怪的是,经过多次尝试,我决定从 github 上复制教程中的代码,我认为我的代码中可能有一个错误,我太笨了,看不到。它仍然没有运行。我用 npm
卸载了这个包并使用 yarn
安装它使用 yarn global add electron@latest
因为有些人建议这样做。我不知道这是否重要,但我也会从下面的 main.js 文件中复制我的代码,因为我想确保我包含了所有内容:
const { app, BrowserWindow } = require('electron')
function createWindow () {
const win = new BrowserWindow({
width: 900,
height: 800,
minHeight: 650,
minWidth: 600,
frame: false,
webPreferences: {
nodeIntegration: true
}
})
win.loadFile('editor.html')
win.webContents.openDevTools()
}
app.whenReady().then(createWindow)
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit()
}
})
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow()
}
})
这是 package.json 文件:{
"dependencies": {
"electron": "^11.0.2"
},
"name": "*******",
"version": "1.0.0",
"description": "**********",
"main": "main.js",
"scripts": {
"start": "electron ."
},
"author": "************",
"license": "MIT"
}
网上的一些问题被回答说项目启动错误,我听从了他们的建议,我使用 yarn start
开始我的项目。命令感谢您阅读本文。
最佳答案
看起来像您的 remote
模块是 undefined
.
你想设置 enableRemoteModule: true
在你的主窗口的webPreferences
,或者更好的是,废品remote
完全从主进程中执行这些操作。remote
模块在 Electron 10 中被禁用.
关于javascript - Electron JS : Uncaught TypeError: Cannot read property "BrowserWindow"/ "getCurrentWindow" of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66231434/