首页 > 解决方案 > Electron:使用 showOpenDialog 允许在 Linux 和 Win10 上选择文件,但为什么我不能在 MacOS 上选择文件?

问题描述

我正在使用以下代码(在 Linux 和 Win10 上取得了巨大成功)来选择一个文件(并最终读取其内容)。

这是在我的 main.js 中,会在 Linux 和 Win10 上弹出一个对话框,让我选择一个文件。

ipc.on('open-file-dialog', function (event) {
  dialog.showOpenDialog({
    properties: ['openFiles'],
    defaultPath: specialFoldersPath,

  }, function (files) {
    if (files) event.sender.send('selected-file', files)
  })
})

该代码也会在 MacOS 上弹出文件打开对话框,但是,在运行 MacOS Mojave v10.14.6 的 Mac Mini 上,我看到以下内容:

Mac 打开文件对话框

请注意,我可以选择一个文件夹,但我不能选择任何文件(它们呈灰色并被禁用)。

我已经检查了https://electronjs.org/docs/api/dialog上的选项,但我没有看到需要为 MacOS 设置任何其他选项以允许选择文件。你知道为什么会这样吗?

注意:当我写这篇文章时,我注意到代码中的一些东西最终成为了解决方案。但是,由于 SO 说您可以发布一个尚未被问到的问题的答案,并且因为这是一个有趣的问题,所以我决定发布并回答。

标签: node.jsmacoselectronopenfiledialog

解决方案


在盯着文档很长一段时间后,我注意到了这个问题。这是非常微妙的。这是文档中的重要部分: 医生说……

哎呀!属性值openFile不是 openFile

鲱鱼是这样的事实,它在 Linux 和 Win10 上确实可以正常工作(使用错误的属性值)。

这是固定代码:

ipc.on('open-file-dialog', function (event) {
  dialog.showOpenDialog({
    properties: ['openFile'],
    defaultPath: specialFoldersPath,

  }, function (files) {
    if (files) event.sender.send('selected-file', files)
  })
})

推荐阅读