gpt4 book ai didi

node.js - 使用 app.quit() 关闭 Electron 应用程序中所有打开的窗口是不好的做法吗?

转载 作者:太空宇宙 更新时间:2023-11-03 21:55:23 24 4
gpt4 key购买 nike

我有一个带有 NodeJS 和 Express 的 Electron 应用程序。我的主要流程代码位于一个文件(app.js)中,路由位于另一个文件(router.js)中。

主文件创建主窗口:

mainWindow = new BrowserWindow({width: 1280, height: 800, icon: iconPath});

每当您单击应用程序中的 pdf 文档链接时,路由文件都会创建一个新窗口:

 router.get('/docs/:module/:type/:file', function(req, res) {
openPDF(req.params.module,req.params.type,req.params.file);
res.end();
});

// open pdf's in a new window
let newWindow;
const openPDF = function(module,filetype,filename) {

let file = 'file:///' + __dirname + '/app/docs/' + module + '/' + filetype + '/' + filename;

let newWindow = new BrowserWindow({
width: 800,
height: 600,
icon: iconPath,
webPreferences: {
nodeIntegration: false
}
});

newWindow.setMenu(null);
// newWindow.webContents.openDevTools();

const param = qs.stringify({file: file});

newWindow.loadURL('file://' + __dirname + '/app/pdfjs/web/viewer.html?' + param);

newWindow.on('closed', function() {
newWindow = null;
});
}

当我关闭主窗口时,我希望所有其他打开的窗口也关闭。我在尝试实现这一点时遇到了困难(两个窗口都在主进程中,因此据我所知,我无法使用 IPC。)然后我意识到,如果我在主窗口时调用 app.quit()关闭它会关闭所有其他窗口:

// Emitted when the window is closed.
mainWindow.on('closed', function () {
// Dereference the window object, usually you would store windows
// in an array if your app supports multi windows, this is the time
// when you should delete the corresponding element.
mainWindow = null
// quitting the app on main window close will close any other open windows
app.quit();
})

我的问题是这是否是一件坏事。它确实会在没有任何用户输入的情况下终止所有打开的窗口,但不会丢失任何未保存的工作,因为所有新窗口都是无法编辑的 pdf 文件。

最佳答案

您应该考虑使用状态容器框架,例如 Redux ,或Flux来管理关闭。这样,当您收到用户的关闭信号时,您可以发送一个信号以确保:

  • 如果用户的数据未保存,则提示用户
  • 如果您愿意,可以将应用的配置数据缓冲到文件中(在下次启动时从之前的状态恢复)
  • 然后运行 ​​app.quit() 以确保安全退出

除此之外,如果您的应用程序不需要安全关闭,那么 app.quit 本身就是关闭您的 Electron 应用程序的完美方法。

关于node.js - 使用 app.quit() 关闭 Electron 应用程序中所有打开的窗口是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42653685/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com