You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Electron 3.0.0桌面应用网络断开时如何将窗口自动设为聚焦激活状态

实现方案

你在渲染进程直接调用窗口相关方法不生效,是因为Electron的顶层窗口操作API仅在主进程可用,需要通过IPC进程间通信通知主进程执行聚焦操作,修改代码如下:

第一步:修改主进程 main.js

  1. 引入ipcMain模块,同时将窗口实例提升到全局作用域可访问
  2. 监听渲染进程发送的窗口聚焦事件,调用主进程窗口API完成操作
    修改后完整代码:
const { app, BrowserWindow, ipcMain } = require('electron')
// 全局存储窗口实例
let win = null

function createWindow () {
  win = new BrowserWindow({
    width: 800,
    height: 600
  })
  win.loadFile('index.html')
}

// 监听渲染进程发来的聚焦窗口请求
ipcMain.on('focus-app-window', () => {
  if (win) {
    // 如果窗口最小化先恢复
    if (win.isMinimized()) win.restore()
    // 显示窗口
    win.show()
    // 聚焦激活窗口
    win.focus()
    // 可选:临时置顶保证切屏场景下也能弹出,需要取消置顶可以后续调用win.setAlwaysOnTop(false)
    win.setAlwaysOnTop(true)
    win.setAlwaysOnTop(false)
  }
})

app.whenReady().then(createWindow)
// 其余原有生命周期逻辑保持不变即可

第二步:修改渲染进程 render.js

引入ipcRenderer模块,在网络断开的触发逻辑里发送聚焦请求给主进程即可,修改后代码:

const { ipcRenderer } = require('electron')

function disconnectInternet(onDisconnected, timeout = 2000, withoutPass = false) {
  uiStatus.innerText = "disconnecting...";
  showNotification();
  // 给主进程发消息触发窗口聚焦
  ipcRenderer.send('focus-app-window')
  // 其余原有逻辑保持不变
  ...
  ...
 }

注意事项

如果你的Electron应用开启了上下文隔离(contextIsolation: true,Electron 3.0版本默认未开启),需要通过预加载脚本(preload)暴露IPC接口,不能直接在渲染层引入ipcRenderer,对应调整预加载脚本即可。

内容的提问来源于stack exchange,提问作者Amir Danish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 14:27:05