electron实现点击按钮选择目录效果

electron yekong

最近在使用electron实现一个效果,不过对electron不熟悉,所以需要一遍实现功能一边记录,方便后期遇到类似的问题能够快速解决。

node环境版本

v16.20.0

electron版本

"electron": "^21.4.4",

electron实现点击按钮选择目录效果

动态效果

Electron 12 及以上版本中,如果你在渲染进程中尝试访问 Electron 的主进程模块,例如 dialog,将不再直接支持。你需要使用预加载脚本将所需的功能从主进程暴露给渲染进程。但是,像 dialog.showOpenDialog 这样的方法需要有一个 BrowserWindow 作为第一个参数。你可以在主进程中定义一个自定义的 IPC 消息来处理这个逻辑,然后在渲染进程中通过 ipcRenderer 调用它。

这里是一些步骤来说明如何实现:

主进程(main.js)

  1. 引入 ipcMaindialog
  2. 在主进程中监听一个自定义的 IPC 事件(例如 open-dialog),并在那里调用 dialog.showOpenDialog
const { app, BrowserWindow, ipcMain, dialog } = require('electron');

// 创建窗口的代码

ipcMain.on('open-dialog', (event) => {
  dialog.showOpenDialog({
    properties: ['openDirectory']
  }).then(result => {
    event.reply('open-dialog-reply', result);
  });
});

预加载脚本(preload.js)

在预加载脚本中,仅暴露 ipcRenderer 的发送和接收功能。

const { contextBridge, ipcRenderer } = require('electron');

contextBridge.exposeInMainWorld('electron', {
  send: (channel, data) => ipcRenderer.send(channel, data),
  on: (channel, callback) => ipcRenderer.on(channel, (event, ...args) => callback(...args))
});

渲染进程的 JavaScript 文件(renderer.js)

现在,你可以在渲染进程中使用这些 IPC 方法来触发主进程中定义的对话框逻辑。

function chooseSave() {
  window.electron.send('open-dialog');
  
  window.electron.on('open-dialog-reply', (result) => {
    if (!result.canceled) {
      document.getElementById('save').value = result.filePaths[0];
    }
  });
}

// 其他函数保持不变

请确保你已正确链接了预加载脚本,并且在主进程和渲染进程之间已正确设置了 IPC 通信。

相关项目

使用electron开发一款单页模板下载助手

实例代码下载

项目运行环境v16.20.0

相关文件下载地址
此资源需支付 ¥1 后下载
支付宝购买扫右侧红包码购买更优惠,如无法下载请联系微信:17331886870
喜欢
electron实现点击按钮选择目录效果