侧边栏壁纸
博主头像
RayMind博主等级

记录美好生活

  • 累计撰写 4 篇文章
  • 累计创建 5 个标签
  • 累计收到 3 条评论

目 录CONTENT

文章目录

electron使用alert应用失去焦点解决办法

RayMind
2023-12-23 / 0 评论 / 1 点赞 / 36 阅读 / 1877 字
温馨提示:
本文最后更新于 2023-12-23,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Electron应用使用alert弹窗,点击确认后页面失去焦点,输入框点击不了

背景:

在用electron开发一个小工具时,使用alert弹窗,点击确认后,鼠标点不到应用中的输入框了,需要点击应用之外的地方再点进来才可以。

但是在渲染进程中引入electron的dialog,像这样 const dialog = require('electron').remote。我这样使用是会报错的,会显示dialog为null,故只能另寻方法。

解决办法:

使用@electron/remote模块,这是一个官方推荐的替代品,但是不推荐用于大型或者性能敏感的应用。

使用方法:

1、安装@electron/remote:

pnpm install @electron/remote

2、在主进程中初始化它


const { app, BrowserWindow } = require('electron');
const remoteMain = require('@electron/remote/main');
remoteMain.initialize();

app.on('ready', () => {
  const mainWindow = new BrowserWindow({
    webPreferences: {
      contextIsolation: false, // 如果你需要在 preload 脚本中使用 remote,你需要关闭 context isolation
    }
  });

  remoteMain.enable(mainWindow.webContents);
});

3、在渲染进程中使用

// 渲染进程
const { dialog } = require('@electron/remote');

dialog.showMessageBox({
  message: "这是一个消息",
  buttons: ["OK"]
}).then(result => {
  if (result.response === 0) { // OK button
    // 用户点击确认后的操作
  }
});

这样使用后就不会出现点击确认后会失去焦点啦。

同样也能替换confirm弹窗,像这样:

// 渲染器进程
const { dialog } = require('@electron/remote');

dialog.showMessageBox({
  type: 'question',  // 使用'question'图标
  buttons: ["取消", "确认"],  // 定义两个按钮
  defaultId: 1,  // 设置默认按钮(0是左边的按钮,1是右边的按钮)
  title: '确认',  // 对话框标题
  message: '你确定要进行这个操作吗?',  // 对话框内容
}).then(result => {
  if (result.response === 1) { // 确认按钮(根据buttons数组的索引)
    // 用户点击了确认
    console.log("用户确认操作");
  } else {
    // 用户点击了取消或关闭了对话框
    console.log("用户取消操作");
  }
});

1

评论区