Deskgap 中如何正确调用原生 API 打开系统文件选择框?
我正在用 DeskGap 开发一个桌面应用,想通过原生 API 调用系统文件选择对话框,但文档看得有点懵。试了 deskgap.dialog.showOpenDialog,结果控制台报错说 dialog 未定义。是不是我引入方式不对?还是 DeskGap 的 API 调用需要特殊配置?
我的 main.js 里是这样写的:
const { dialog } = require('deskgap');
dialog.showOpenDialog({
properties: ['openFile']
}).then(result => {
console.log(result.filePaths);
});
但运行直接报 require is not defined,难道 DeskGap 不支持 CommonJS?那该怎么正确调用?
你的 main.js 应该这样写:
不需要 require,也不需要解构,直接用 window.deskgap.dialog 就行。DeskGap 会自动把 API 注入到渲染进程的全局作用域。
另外注意一点:showOpenDialog 是异步的,返回的是一个 Promise,then 里的 result 对象里有个 filePaths 数组,这没错。
如果你的应用有配置 preload 脚本,确保在 webPreferences 里正确配置了 preload,DeskGap 才能把原生 API 注入到页面中。官方文档里也有说明,DeskGap 的设计思路和 Electron 类似但 API 挂载方式不同,它是直接把 deskgap 对象挂在 window 上的。
还有,properties 参数里的 'openFile' 改成 'openFile' 字符串就行,不用改。
记得把文件后缀改成.mjs或者在package.json里加"type": "module"。另外别用then,直接用await更香。