node.js - 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 上,我看到以下内容:
请注意,我可以选择一个文件夹,但我不能选择任何文件(它们呈灰色并被禁用)。
我已经检查了https://electronjs.org/docs/api/dialog上的选项,但我没有看到需要为 MacOS 设置任何其他选项以允许选择文件。你知道为什么会这样吗?
注意:当我写这篇文章时,我注意到代码中的一些东西最终成为了解决方案。但是,由于 SO 说您可以发布一个尚未被问到的问题的答案,并且因为这是一个有趣的问题,所以我决定发布并回答。
解决方案
在盯着文档很长一段时间后,我注意到了这个问题。这是非常微妙的。这是文档中的重要部分:
哎呀!属性值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)
})
})
推荐阅读
- google-app-engine - 来自服务帐户 OIDC 令牌的 IAP:401 Unauthorized
- forms - 聚合物重置参数格式不起作用
- c# - 如何创建 ShareFileClient 而不指定它的大小以便能够将数据流式传输到它?
- linux-mint - 为什么 Vivaldi 在 LinuxMint 20 XFCE 上比 Remmina VNC 歪?
- postman - 使用 newman 在 htmlextra 报告中进行多次迭代
- javascript - 禁用行选择,只允许在 PrimeNG 的 Mutliselect 中选择复选框
- python - 如何使用 matplotlib 绘制具有颜色渐变长度的 3d 箭袋图?给出错误“ValueError: object too deep for desired array”
- c++ - 尽管引用未定义(缺少`extern“C”`),为什么可以链接静态库?
- python - 使用时间信息列导入节点列表
- html - 如何只获取模型#,但它在多个行内
- 标签 HTML 网页抓取