electron 使用模态窗口(即子窗口关闭前父窗口不能获取焦点)

1、background.js

在主进程里面添加下面代码

//父窗口
async function createWindow() {
  // Create the browser window.
  const win = new BrowserWindow({
    width: 432,
    height: 331,
    alwaysOnTop: true,//窗口一直保持在其他窗口前面
    modal: true,
    frame: false,//关闭默认的最大化、最小化、关闭
    skipTaskbar: true, // 窗口是否不显示在任务栏上面
    darkTheme: true,//窗口是否随window主题
    resizable: false,//用户是否可以调整窗口
    center: true, // 窗口居中
    icon: path.join(__static, "./static/logo.ico"),
    transparent: false,//窗口是否透明
    show: false,// 显示窗口将没有视觉闪烁    配合下面ready-to-show事件
    hasShadow: true,//窗口是否有阴影   
    webPreferences: {
      devTools: true,//客户端是否可以打开开发者工具     (客户端快捷键:ctrl+shift+i)
      nodeIntegration: true,//开启node模块
      enableRemoteModule: true, // 使用remote模块     electron12版本之后废除了,需要自己安装
      contextIsolation: false,
      //解决axios跨域请求      不推荐,不安全,但简单好用
      webSecurity: false,
    },
  })

// 新建窗口路径
  const winURL = process.env.NODE_ENV === 'development' ? `http://localhost:8080` : `file://${__dirname}/index.html`

  //IPC监听  新建窗口  子窗口
  ipcMain.on('openWindow', (event,data)=> {
    //调用 BrowserWindow打开新窗口
    let win2 = new BrowserWindow({
      width: 650,
      height: 480,
      x:data.x,
      y:data.y,
      frame: false,
        
      parent: win,//父窗口名
      modal: true,//开启模态父子窗口
      
      resizable: false,//用户是否可以自己调整窗口大小
      hasShadow: true,//窗口是否有阴影   
      icon: path.join(__static, "./static/logo.ico"),
      webPreferences: {
        // devTools: false,//关闭开发者工具
        devTools: true,//客户端是否可以打开开发者工具     (客户端快捷键:ctrl+shift+i)
        nodeIntegration: true,//开启node模块
        enableRemoteModule: true, // 使用remote模块     electron12版本之后废除了,需要自己安装
        contextIsolation: false,
        //解决axios跨域请求      不推荐,不安全,但简单好用
        webSecurity: false,
      },
    })
    //子窗口显示的页面路由    在这里路由是/test
    win2.loadURL(winURL + "/#/test");

    win2.webContents.openDevTools();

    win2.on('closed', () => {
      win2 = null;
    })


  })

2、注意

1、在这里之前遇见了一个坑,关闭子窗口会报错

TypeError: Assignment to constant variable

可能是子窗口用const来定义

const win2 = new BrowserWindow({···})

改成    let 

let win2 = new BrowserWindow({···})

2022/9/7

发现新的办法----模态窗口(即子窗口关闭前父窗口不能获取焦点)

把下面这个代码替换1中win2窗口的2个属性,也可以实现模态窗口功能

parent: BrowserWindow.getFocusedWindow(),//父窗口
modal: true,//开启父子窗口
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豪先生5

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值