Den*_*han 0 javascript node.js electron
我想通过js关闭Electron App。
"electron": "^13.1.7"
Run Code Online (Sandbox Code Playgroud)
我仔细阅读了这些问题:
但这些都不适合我。
以下所有测试均基于官方的电子快速启动
索引.html
"electron": "^13.1.7"
Run Code Online (Sandbox Code Playgroud)
main.js
<body>
<button id="close-app">
close
</button>
<script src="./renderer.js"></script>
</body>
Run Code Online (Sandbox Code Playgroud)
没有任何影响或错误。
似乎代码从未运行过,我console.log('run')在上面添加了一个addEventListener,但控制台中没有打印任何内容。
(不改变官方的电子快速启动,只改变preload.js和index.html)
索引.html
与上面相同
预加载.js
const { app } = require('electron');
window.addEventListener('DOMContentLoaded', () => {
document.getElementById("close-app").addEventListener("click", function (e) {
app.quit();
})
})
Run Code Online (Sandbox Code Playgroud)
Uncaught TypeError: Cannot read property 'quit' of undefined只
得到
那么,如何通过js关闭Electron App呢?
非常感谢任何人的帮助!
Electron 具有仅在主进程中工作的模块,app以及仅在渲染器进程中工作的模块,ipcRenderer以及常见且可以在两个进程中运行的模块
我建议阅读Electron 文档中的这篇文章,它解释了流程模型
预加载脚本包含在 Web 内容开始加载之前在渲染器进程中执行的代码。这些脚本在渲染器上下文中运行,但通过访问 Node.js API 被授予更多权限。
因为该app模块是一个主进程模块,如果尝试从预加载脚本(渲染器进程)访问它,app将会出现未定义的情况
// in preload.js
const { app } = require('electron');
console.log(app); // undefined
Run Code Online (Sandbox Code Playgroud)
相反,您应该使用进程间通信来告诉主进程退出
// in main.js
const { app, ipcMain } = require('electron');
ipcMain.handle('quit-app', () => {
app.quit();
});
// in preload.js
const { ipcRenderer } = require('electron');
window.addEventListener('DOMContentLoaded', () => {
document.getElementById('close-app').addEventListener('click', () => {
ipcRenderer.invoke('quit-app');
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2939 次 |
| 最近记录: |