NW.js 中如何正确调用原生文件对话框?

小翌菡 阅读 35

我在 NW.js 里想弹出系统默认的文件选择窗口,但试了几次都不行。

查文档说要用 nw.Window.get().showOpenDialog(),但一调用就报错说 showOpenDialog 不是函数。我是不是哪里弄错了?

我的代码大概是这样:

const win = nw.Window.get();
win.showOpenDialog({ multiple: false }, (files) => {
  if (files) console.log(files[0]);
});

控制台直接报 TypeError,说 win.showOpenDialog is not a function。这 API 是不是改了?还是我漏了什么配置?

我来解答 赞 2 收藏
二维码
手机扫码查看
1 条解答
Newb.玉楠
你踩的这个坑我太熟悉了,让我直接告诉你怎么解决。

首先,showOpenDialog确实存在,但要用对方式。问题出在你的nw.js配置上,得确保在package.json里设置了正确的manifest字段,不然这个API根本不会生效。

在你的package.json里加上这行:
{
"main": "index.html",
"name": "your-app-name",
"node-remote": "<local>"
}


然后记得把你的app重新打包加载一下。还有个容易忽视的地方,调用showOpenDialog时最好加个window参数,像这样:

const win = nw.Window.get();
win.showOpenDialog(null, { multiple: false }, (files) => {
if (files && files.length) console.log(files[0]);
});

别走弯路,先检查配置再调用,基本就不会报错了。我当初为这事儿折腾了半天,后来发现就是配置文件的问题。希望你能顺利解决,省点力气干别的。
点赞
2026-03-26 10:00