【问题标题】:dialog.showSaveDialog doesn't return anythingdialog.showSaveDialog 不返回任何内容
【发布时间】:2026-01-22 10:20:04
【问题描述】:

所以,我正在尝试创建一个简单的保存对话框,用户可以在其中选择一个位置和文件名,然后它将在该指定位置创建一个文件。

我已经关注了文档,还查看了一些教程,代码完全相同,但显然在我的情况下,当我打开对话框,选择一个位置并单击保存时,我没有得到任何回复dialog.showSaveDialog 方法的回调。

对不起,如果这是一个菜鸟的错误,我刚刚开始接触 Electron。

这是我的代码:

const { dialog } = require('electron').remote

const createBtn = document.getElementById('create_btn')

createBtn.addEventListener('click', async () => {
  console.log('First Response: ', await dialog.showSaveDialog())

  dialog.showSaveDialog(path => {
    console.log('Second Response: ', path)
  })
})

这是完整的控制台日志:

First Response:  {}

编辑: 根据最新的文档,我也尝试过这种方法。但没有运气!

const { dialog } = require('electron').remote

const createBtn = document.getElementById('create_btn')

createBtn.addEventListener('click', async () => {
  dialog.showSaveDialog({}).then((result) => {
    console.log('Second Response: ', result)
  }).catch((...args) => {
    console.warn('failed/rejected with', args)
  })
})

电子:v7.1.8

【问题讨论】:

    标签: javascript html dialog electron


    【解决方案1】:

    我怀疑您只需点击控制台中的{} 即可展开结果;)

    Here isElectron Fiddle 演示 showSaveDialog

    <button id="save">Show save dialog</button>
    <pre id="output"></pre>
    
    // renderer.js
    const { dialog } = require('electron').remote;
    
    const outEl = document.getElementById('output');
    function log(...args) {
      console.log(...args);
      outEl.innerText += args.join(' ');
    }
    
    const buttonEl = document.getElementById('save');
    buttonEl.addEventListener('click', async () => {
      const dialogOptions = {};
      try {
        const result = await dialog.showSaveDialog(dialogOptions);
        log('Save resolved:', result);
        const { filePath } = result;
        log('filePath -->', filePath);
      } catch (e) {
        log('Save failed:', e)
      }
    });
    

    【讨论】:

    • 看来,我理解错了。将删除反对票。
    【解决方案2】:
    const { dialog, app } = require('electron')
    
    ...
    const options = {}; // You can set this as your need
    const result = await dialog.showSaveDialog(mainWindow, options);
    

    您可以将 browserWindow 设置为 firstParameter,该参数将设置为此对话框的父级,然后将选项设置为 secondParameter。 您可以在教程文档或 Electron 指南中查看可用的选项

    检查这个:https://electronjs.org/docs/api/dialog#dialogshowsavedialogbrowserwindow-options

    【讨论】:

    • 函数签名中不再有callback参数
    • 嘿,@iX3 你是什么意思?
    • 您说,“第三个参数是回调函数...”但dialog.showSaveDialog 只接受两个参数:browserWindowoptions。它不适用于回调。
    • 我否决了这个答案的原因是(1)关于回调的技术错误——也就是说,您提供的代码实际上在电子 v7.x 上无法按预期工作,(2)关于 browserWindow 的分散评论与 OP 的问题无关,以及 (3) 分散注意力的代码来设置可选的 defaultPath 选项,这也与问题无关。
    • 我刚刚分享了示例
    最近更新 更多