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

AngularJS+Electron应用关闭时清除localStorage的实现咨询

解决Electron应用关闭时清除LocalStorage的问题

嘿,我明白你的困扰——关闭Electron应用后localStorage没被清除,导致重启直接进入列表页跳过了登录环节。别担心,我们可以通过主进程和渲染进程的交互,在应用关闭时自动清除localStorage,下面是具体的实现方案:

核心思路

Electron的渲染进程localStorage是持久化保存的,默认不会随应用关闭自动清除。我们需要在应用即将退出或者窗口关闭时,让渲染进程执行清除localStorage的操作。

具体实现方法

方法一:监听应用的before-quit事件(推荐)

这个事件会在应用真正退出时触发(不管是点击窗口关闭按钮,还是在macOS下通过菜单退出),兼容性更好。修改你的main.js代码如下:

function createWindow() {
  // 这里保留你创建窗口的原有代码,比如:
  // mainWindow = new BrowserWindow({ width: 800, height: 600 })
  // mainWindow.loadFile('index.html')

  // 保留原有的closed事件逻辑
  mainWindow.on('closed', function () {
    mainWindow = null
  })
}

app.on('ready', createWindow)

app.on('window-all-closed', function () {
  if (process.platform !== 'darwin') { 
    app.quit() 
  }
})

app.on('activate', function () {
  if (mainWindow === null) { 
    createWindow() 
  }
})

// 新增:监听应用退出前的事件,执行LocalStorage清除操作
app.on('before-quit', (event) => {
  if (mainWindow) {
    // 让渲染进程执行清除代码
    mainWindow.webContents.executeJavaScript(`
      // 两种清除方式选其一即可:
      // 方式1:清除全部LocalStorage
      localStorage.clear();
      // 方式2:只清除登录相关的指定键(更精准)
      // localStorage.removeItem('username');
      // localStorage.removeItem('password');
    `)
    .then(() => {
      console.log('LocalStorage已成功清除')
    })
    .catch(err => {
      console.error('清除LocalStorage失败:', err)
    })
  }
})

方法二:监听窗口的close事件

如果只希望在单个窗口关闭时清除登录状态,可以给窗口添加close事件监听:

function createWindow() {
  // 保留你创建窗口的原有代码...

  // 新增窗口关闭事件监听
  mainWindow.on('close', (event) => {
    // 执行LocalStorage清除操作
    mainWindow.webContents.executeJavaScript(`
      localStorage.clear();
      // 或者选择只清除指定键:
      // localStorage.removeItem('username');
      // localStorage.removeItem('password');
    `)
    .then(() => {
      console.log('LocalStorage已清除')
      mainWindow = null
    })
    .catch(err => {
      console.error('清除失败:', err)
      mainWindow = null
    })
  })

  // 保留原有的closed事件逻辑
  mainWindow.on('closed', function () {
    mainWindow = null
  })
}

// 其余原有代码保持不变...

为什么这样有效?

webContents.executeJavaScript()方法可以让主进程直接在渲染进程中执行JS代码,这样我们就能调用localStorage.clear()(或指定移除登录相关键)来清除登录状态。下次重启应用时,localStorage里没有登录信息,就会自动回到登录页面了。

内容的提问来源于stack exchange,提问作者Lalji Tadhani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:45:40