Electron中dialog.showOpenDialog为什么在渲染进程调用没反应?
我在渲染进程中直接调用 dialog.showOpenDialog,但点击按钮完全没弹出文件选择框,也不报错,这是为啥?
我试过把代码放到主进程里用 ipc 通信,但想先搞清楚为什么直接调用不行。是不是现在 Electron 不允许在渲染进程直接用 dialog 了?
<button onclick="openFile()">选择文件</button>
<script>
const { dialog } = require('electron');
function openFile() {
dialog.showOpenDialog({ properties: ['openFile'] });
}
</script>
解决办法是通过 IPC(进程间通信)让渲染进程和主进程进行对话。你可以在渲染进程中触发一个事件,然后在主进程中监听这个事件,最后由主进程调用 dialog.showOpenDialog。
举个例子,修改你的代码如下:
在渲染进程中:
在主进程中:
记得在你的 HTML 文件中给按钮加个 ID:
这样设置后,当你点击按钮时,渲染进程会发送一个消息给主进程,主进程接收到消息后就会弹出文件选择对话框。希望这能帮到你,少走些弯路。