跳到主内容

dialog

显示用于打开和保存文件、警告等的原生系统对话框。

进程:

显示对话框以选择多个文件的示例

const { dialog } = require('electron')
console.log(dialog.showOpenDialog({ properties: ['openFile', 'multiSelections'] }))

方法

dialog 模块有以下方法

dialog.showOpenDialogSync([window, ]options)

  • window BaseWindow (可选)
  • options Object
    • title string (可选)
    • defaultPath string (可选)
    • buttonLabel string (可选) - 确认按钮的自定义标签,留空时将使用默认标签。
    • filters FileFilter[] (可选)
    • properties string[] (可选) - 包含对话框应使用的功能。支持以下值
      • openFile - 允许选择文件。
      • openDirectory - 允许选择目录。
      • multiSelections - 允许多个路径被选择。
      • showHiddenFiles - 在对话框中显示隐藏文件。
      • createDirectory macOS - 允许在对话框中创建新目录。
      • promptToCreate Windows - 如果在对话框中输入的文件路径不存在,则提示创建。这并不会实际在该路径创建文件,但允许返回不存在的路径,这些路径应由应用程序创建。
      • noResolveAliases macOS - 禁用自动别名 (symlink) 路径解析。选定的别名将返回别名路径而不是其目标路径。
      • treatPackageAsDirectory macOS - 将包 (packages),例如 .app 文件夹,视为目录而不是文件。
      • dontAddToRecent Windows - 不会将正在打开的项目添加到最近的文档列表。
    • message string (可选) macOS - 在输入框上方显示的消息。
    • securityScopedBookmarks boolean (可选) macOS MAS - 在为 Mac App Store 打包时创建安全范围内的书签 (security scoped bookmarks)

返回 string[] | undefined,用户选择的文件路径;如果对话框被取消,则返回 undefined

window 参数允许对话框附加到父窗口,使其成为模态窗口。

filters 指定一个文件类型数组,用于限制用户只能显示或选择特定类型的文件。例如

{
filters: [
{ name: 'Images', extensions: ['jpg', 'png', 'gif'] },
{ name: 'Movies', extensions: ['mkv', 'avi', 'mp4'] },
{ name: 'Custom File Type', extensions: ['as'] },
{ name: 'All Files', extensions: ['*'] }
]
}

extensions 数组应包含不带通配符或点的扩展名 (例如 'png' 是正确的,而 '.png''*.png' 是错误的)。要显示所有文件,请使用 '*' 通配符 (不支持其他通配符)。

注意: 在 Windows 和 Linux 上,打开对话框不能同时是文件选择器和目录选择器,因此如果您在这些平台上将 properties 设置为 ['openFile', 'openDirectory'],将显示目录选择器。

dialog.showOpenDialogSync(mainWindow, {
properties: ['openFile', 'openDirectory']
})

注意: 在 Linux 上,使用 portal 文件选择器对话框时,除非 portal 后端版本为 4 或更高,否则不支持 defaultPath。您可以使用 --xdg-portal-required-version 命令行开关强制使用 gtk 或 kde 对话框。

dialog.showOpenDialog([window, ]options)

  • window BaseWindow (可选)
  • options Object
    • title string (可选)
    • defaultPath string (可选)
    • buttonLabel string (可选) - 确认按钮的自定义标签,留空时将使用默认标签。
    • filters FileFilter[] (可选)
    • properties string[] (可选) - 包含对话框应使用的功能。支持以下值
      • openFile - 允许选择文件。
      • openDirectory - 允许选择目录。
      • multiSelections - 允许多个路径被选择。
      • showHiddenFiles - 在对话框中显示隐藏文件。
      • createDirectory macOS - 允许在对话框中创建新目录。
      • promptToCreate Windows - 如果在对话框中输入的文件路径不存在,则提示创建。这并不会实际在该路径创建文件,但允许返回不存在的路径,这些路径应由应用程序创建。
      • noResolveAliases macOS - 禁用自动别名 (symlink) 路径解析。选定的别名将返回别名路径而不是其目标路径。
      • treatPackageAsDirectory macOS - 将包 (packages),例如 .app 文件夹,视为目录而不是文件。
      • dontAddToRecent Windows - 不会将正在打开的项目添加到最近的文档列表。
    • message string (可选) macOS - 在输入框上方显示的消息。
    • securityScopedBookmarks boolean (可选) macOS MAS - 在为 Mac App Store 打包时创建安全范围内的书签 (security scoped bookmarks)

返回 Promise<Object> - 解析为一个包含以下属性的对象

  • canceled boolean - 对话框是否被取消。
  • filePaths string[] - 用户选择的文件路径数组。如果对话框被取消,这将是一个空数组。
  • bookmarks string[] (可选) macOS MAS - 一个与 filePaths 数组对应的 base64 编码字符串数组,包含安全范围内的书签数据。必须启用 securityScopedBookmarks 才能填充此字段。(有关返回值,请参阅此处表格)。

window 参数允许对话框附加到父窗口,使其成为模态窗口。

filters 指定一个文件类型数组,用于限制用户只能显示或选择特定类型的文件。例如

{
filters: [
{ name: 'Images', extensions: ['jpg', 'png', 'gif'] },
{ name: 'Movies', extensions: ['mkv', 'avi', 'mp4'] },
{ name: 'Custom File Type', extensions: ['as'] },
{ name: 'All Files', extensions: ['*'] }
]
}

extensions 数组应包含不带通配符或点的扩展名 (例如 'png' 是正确的,而 '.png''*.png' 是错误的)。要显示所有文件,请使用 '*' 通配符 (不支持其他通配符)。

注意: 在 Windows 和 Linux 上,打开对话框不能同时是文件选择器和目录选择器,因此如果您在这些平台上将 properties 设置为 ['openFile', 'openDirectory'],将显示目录选择器。

dialog.showOpenDialog(mainWindow, {
properties: ['openFile', 'openDirectory']
}).then(result => {
console.log(result.canceled)
console.log(result.filePaths)
}).catch(err => {
console.log(err)
})

注意: 在 Linux 上,使用 portal 文件选择器对话框时,除非 portal 后端版本为 4 或更高,否则不支持 defaultPath。您可以使用 --xdg-portal-required-version 命令行开关强制使用 gtk 或 kde 对话框。

dialog.showSaveDialogSync([window, ]options)

  • window BaseWindow (可选)
  • options Object
    • title string (可选) - 对话框标题。在某些 Linux 桌面环境中无法显示。
    • defaultPath string (可选) - 默认使用的绝对目录路径、绝对文件路径或文件名。
    • buttonLabel string (可选) - 确认按钮的自定义标签,留空时将使用默认标签。
    • filters FileFilter[] (可选)
    • message string (可选) macOS - 在文本字段上方显示的消息。
    • nameFieldLabel string (可选) macOS - 文件名字段前显示的文本的自定义标签。
    • showsTagField boolean (可选) macOS - 显示标签输入框,默认为 true
    • properties string[] (可选)
      • showHiddenFiles - 在对话框中显示隐藏文件。
      • createDirectory macOS - 允许在对话框中创建新目录。
      • treatPackageAsDirectory macOS - 将包 (packages),例如 .app 文件夹,视为目录而不是文件。
      • showOverwriteConfirmation Linux - 设置当用户输入的文件名已存在时,是否向用户显示确认对话框。
      • dontAddToRecent Windows - 不会将正在保存的项目添加到最近的文档列表。
    • securityScopedBookmarks boolean (可选) macOS MAS - 在为 Mac App Store 打包时创建安全范围内的书签。如果启用此选项且文件尚不存在,则将在所选路径创建一个空白文件。

返回 string,用户选择的文件路径;如果对话框被取消,则返回一个空字符串。

window 参数允许对话框附加到父窗口,使其成为模态窗口。

filters 指定一个可以显示的文件类型数组,参见 dialog.showOpenDialog 获取示例。

dialog.showSaveDialog([window, ]options)

  • window BaseWindow (可选)
  • options Object
    • title string (可选) - 对话框标题。在某些 Linux 桌面环境中无法显示。
    • defaultPath string (可选) - 默认使用的绝对目录路径、绝对文件路径或文件名。
    • buttonLabel string (可选) - 确认按钮的自定义标签,留空时将使用默认标签。
    • filters FileFilter[] (可选)
    • message string (可选) macOS - 在文本字段上方显示的消息。
    • nameFieldLabel string (可选) macOS - 文件名字段前显示的文本的自定义标签。
    • showsTagField boolean (可选) macOS - 显示标签输入框,默认为 true
    • properties string[] (可选)
      • showHiddenFiles - 在对话框中显示隐藏文件。
      • createDirectory macOS - 允许在对话框中创建新目录。
      • treatPackageAsDirectory macOS - 将包 (packages),例如 .app 文件夹,视为目录而不是文件。
      • showOverwriteConfirmation Linux - 设置当用户输入的文件名已存在时,是否向用户显示确认对话框。
      • dontAddToRecent Windows - 不会将正在保存的项目添加到最近的文档列表。
    • securityScopedBookmarks boolean (可选) macOS MAS - 在为 Mac App Store 打包时创建安全范围内的书签。如果启用此选项且文件尚不存在,则将在所选路径创建一个空白文件。

返回 Promise<Object> - 解析为一个包含以下属性的对象

  • canceled boolean - 对话框是否被取消。
  • filePath string - 如果对话框被取消,这将是一个空字符串。
  • bookmark string (可选) macOS MAS - 包含已保存文件的安全范围内的书签数据的 base64 编码字符串。必须启用 securityScopedBookmarks 才能存在此字段。(有关返回值,请参阅此处表格)。

window 参数允许对话框附加到父窗口,使其成为模态窗口。

filters 指定一个可以显示的文件类型数组,参见 dialog.showOpenDialog 获取示例。

注意: 在 macOS 上,建议使用异步版本,以避免对话框展开和折叠时出现问题。

dialog.showMessageBoxSync([window, ]options)

  • window BaseWindow (可选)
  • options Object
    • message string - 消息框的内容。
    • type string (可选) - 可以是 noneinfoerrorquestionwarning。在 Windows 上,question 显示的图标与 info 相同,除非您使用 icon 选项设置了图标。在 macOS 上,warningerror 都显示相同的警告图标。
    • buttons string[] (可选) - 按钮文本数组。在 Windows 上,一个空数组将导致一个标签为 "OK" 的按钮。
    • defaultId Integer (可选) - 当消息框打开时,默认选择的按钮在 buttons 数组中的索引。
    • title string (可选) - 消息框标题,某些平台不会显示。
    • detail string (可选) - 消息的附加信息。
    • icon (NativeImage | string) (可选)
    • textWidth Integer (可选) macOS - 消息框中文本的自定义宽度。
    • cancelId Integer (可选) - 用于通过 Esc 键取消对话框的按钮索引。默认情况下,这会被分配给第一个标签为 "cancel" 或 "no" 的按钮。如果不存在带有此类标签的按钮且未设置此选项,则将使用 0 作为返回值。
    • noLink boolean (可选) - 在 Windows 上,Electron 会尝试找出 buttons 中的哪些是常用按钮 (如 "Cancel" 或 "Yes"),并将其他按钮显示为对话框中的命令链接。这可以使对话框看起来像现代 Windows 应用程序的风格。如果您不喜欢这种行为,可以将 noLink 设置为 true
    • normalizeAccessKeys boolean (可选) - 在不同平台之间标准化键盘访问键。默认为 false。启用此选项假定在按钮标签中使用 & 来指定键盘快捷方式访问键的位置,并且标签将被转换,以便它们在每个平台上都能正常工作,& 字符在 macOS 上被移除,在 Linux 上转换为 _,在 Windows 上保持不变。例如,按钮标签 Vie&w 在 Linux 上将转换为 Vie_w,在 macOS 上转换为 View,并且可以在 Windows 和 Linux 上通过 Alt-W 选择。

返回 Integer - 被点击按钮的索引。

显示一个消息框,它会阻塞进程直到消息框关闭。它返回被点击按钮的索引。

window 参数允许对话框附加到父窗口,使其成为模态窗口。如果 window 没有显示,对话框将不会附加到它。在这种情况下,它将作为一个独立的窗口显示。

dialog.showMessageBox([window, ]options)

  • window BaseWindow (可选)
  • options Object
    • message string - 消息框的内容。
    • type string (可选) - 可以是 noneinfoerrorquestionwarning。在 Windows 上,question 显示的图标与 info 相同,除非您使用 icon 选项设置了图标。在 macOS 上,warningerror 都显示相同的警告图标。
    • buttons string[] (可选) - 按钮文本数组。在 Windows 上,一个空数组将导致一个标签为 "OK" 的按钮。
    • defaultId Integer (可选) - 当消息框打开时,默认选择的按钮在 buttons 数组中的索引。
    • signal AbortSignal (可选) - 传入 AbortSignal 的实例以选择性地关闭消息框,消息框将表现得像被用户取消一样。在 macOS 上,signal 不适用于没有父窗口的消息框,因为这些消息框由于平台限制会同步运行。
    • title string (可选) - 消息框标题,某些平台不会显示。
    • detail string (可选) - 消息的附加信息。
    • checkboxLabel string (可选) - 如果提供,消息框将包含一个带有指定标签的复选框。
    • checkboxChecked boolean (可选) - 复选框的初始选中状态。默认为 false
    • icon (NativeImage | string) (可选)
    • textWidth Integer (可选) macOS - 消息框中文本的自定义宽度。
    • cancelId Integer (可选) - 用于通过 Esc 键取消对话框的按钮索引。默认情况下,这会被分配给第一个标签为 "cancel" 或 "no" 的按钮。如果不存在带有此类标签的按钮且未设置此选项,则将使用 0 作为返回值。
    • noLink boolean (可选) - 在 Windows 上,Electron 会尝试找出 buttons 中的哪些是常用按钮 (如 "Cancel" 或 "Yes"),并将其他按钮显示为对话框中的命令链接。这可以使对话框看起来像现代 Windows 应用程序的风格。如果您不喜欢这种行为,可以将 noLink 设置为 true
    • normalizeAccessKeys boolean (可选) - 在不同平台之间标准化键盘访问键。默认为 false。启用此选项假定在按钮标签中使用 & 来指定键盘快捷方式访问键的位置,并且标签将被转换,以便它们在每个平台上都能正常工作,& 字符在 macOS 上被移除,在 Linux 上转换为 _,在 Windows 上保持不变。例如,按钮标签 Vie&w 在 Linux 上将转换为 Vie_w,在 macOS 上转换为 View,并且可以在 Windows 和 Linux 上通过 Alt-W 选择。

返回 Promise<Object> - 解析为一个包含以下属性的 Promise

  • response number - 被点击按钮的索引。
  • checkboxChecked boolean - 如果设置了 checkboxLabel,则表示复选框的选中状态。否则为 false

显示一个消息框。

window 参数允许对话框附加到父窗口,使其成为模态窗口。

dialog.showErrorBox(title, content)

  • title string - 在错误框中显示的标题。
  • content string - 在错误框中显示的文本内容。

显示一个模态对话框,其中包含错误消息。

此 API 可以安全地在 app 模块发出 ready 事件之前调用,它通常用于报告启动初期的错误。如果在 Linux 上在 app ready 事件之前调用,消息将输出到 stderr,不会出现 GUI 对话框。

dialog.showCertificateTrustDialog([window, ]options) macOS Windows

  • window BaseWindow (可选)
  • options Object
    • certificate Certificate - 要信任/导入的证书。
    • message string - 向用户显示的消息。

返回 Promise<void> - 在显示证书信任对话框时解析。

在 macOS 上,这将显示一个模态对话框,显示消息和证书信息,并提供用户信任/导入证书的选项。如果您提供 window 参数,对话框将附加到父窗口,使其成为模态窗口。

在 Windows 上,由于使用了 Win32 API,选项更有限

  • message 参数未使用,因为操作系统提供了自己的确认对话框。
  • window 参数被忽略,因为无法使此确认对话框成为模态。

书签数组

showOpenDialogshowSaveDialog 解析为一个包含 bookmarks 字段的对象。此字段是一个 Base64 编码字符串数组,包含已保存文件的安全范围内的书签数据。必须启用 securityScopedBookmarks 选项才能存在此字段。

构建类型securityScopedBookmarks boolean返回类型返回值
macOS masTrue成功['LONGBOOKMARKSTRING']
macOS masTrue错误[''] (空字符串数组)
macOS masFalse不适用[] (空数组)
非 mas任意不适用[] (空数组)

Sheets

在 macOS 上,如果您在 window 参数中提供 BaseWindow 引用,对话框将作为附加到窗口的表单 (sheet) 显示,如果未提供窗口,则显示为模态对话框。

您可以调用 BaseWindow.getCurrentWindow().setSheetOffset(offset) 来更改表单 (sheets) 附加到窗口框架的偏移量。