在我的电子应用中,我正在学习没有remote
的生活。我已经到了需要从渲染器打开一个文件的地步,据我了解,这需要主进程来显示文件对话框并返回结果。
在我的main.js
中,我有以下内容:
ipcMain.on('open-file',(event,data)=>{
dialog.showOpenDialog(null, data, (filePaths) => {
event.sender.send('open-file-paths', filePaths);
});
});
在我的呈现过程(我称之为pager.js
)中,我有以下内容:
ipcRenderer.send('open-file',{
title: 'Title',
defaultPath: localStorage.getItem('defaultPath')
});
ipcRenderer.on('open-file-paths',(event,data)=>{
console.log(event);
console.log(data);
});
文件打开对话框运行良好,但我不知道如何获得结果。ipcRenderer.on('open-file-paths',…)
没有被调用,所以这显然不是正确的方法。我希望得到所选的路径或取消的消息。
如何在呈现过程中获得showOpenDialog
的结果?
发布于 2021-12-13 09:23:17
好吧,我想我知道了。
感谢ShowOpenDialog not working on recent versions of electron-js中的一个答案,我看到showOpenDialog
现在返回一个承诺,这意味着在main.js
中重新处理代码。以下是一个可行的解决方案:
// main.js
ipcMain.on('open-file',(event,data)=>{
dialog.showOpenDialog(null, data).then(filePaths => {
event.sender.send('open-file-paths', filePaths);
});
});
// pager.js (render)
ipcRenderer.send('open-file',{
title: 'Title',
defaultPath: localStorage.getItem('defaultPath')
});
ipcRenderer.on('open-file-paths',(event,data)=>{
console.log(`Canceled? ${data.canceled}`);
console.log(`File Paths: ${data.filePaths.join(';')`);
});
https://stackoverflow.com/questions/70331707
复制相似问题