【问题标题】:How to access local Storage data inside window-all-closed event如何在 window-all-closed 事件中访问本地存储数据
【发布时间】:2020-07-17 20:15:50
【问题描述】:

我对 Electron 很陌生,并且一直在为我的应用程序尝试 electron-react-boilerplate。我确实有一个要求,我必须使用保存在本地存储中的数据发送 API 请求,以防通过单击窗口关闭按钮关闭电子应用程序。我尝试为以下事件添加代码。

app.on('ready', createWindow);

const createWindow = async () => {

     mainWindow = new BrowserWindow({
     show: false,
     webPreferences: {
        nodeIntegration: true
        }
     });

     mainWindow.on('closed', () => {
       alert('123');
       const user = JSON.parse(localStorage.getItem('currentUser'));
       // ...Service call
    });

};

app.on('window-all-closed', () => {
    const user = JSON.parse(localStorage.getItem('currentUser'));
    // ...Service call
});

当我关闭应用程序时,出现以下两个错误:

Reference Error: alert is not defined
Reference Error: localStorage is not defined

有人可以帮助我,让我知道上面的错误是什么。

【问题讨论】:

    标签: electron local-storage


    【解决方案1】:

    根据issue 9110,您不能这样做,也不能在更近的时间内这样做。但是您可以在窗口关闭之前将 localStorage 发送到主脚本。这样做:

    1. 使用窗口选项在预加载时添加新脚本:
      const win = new BrowserWindow({
         webPreferences: {
             preload: './local-storage-sync.js',
         },
      })
      
      win.webContents.on('ipc-message-sync', (e, channel, ...args) => {
        if (channel === 'local-storage') {
           // Do something with local storage.
        }
      })
      
    2. 创建local-storage-sync.js:
      const {ipcRenderer} = require('electron');
      window.addEventListener('beforeunload', () => {
         ipcRenderer.sendSync('local-storage', JSON.stringify(localStorage))
      });
      

    这是您可以将源的 localStorage 检索到主进程的方法。但请注意,这种方法可能会因大量页面加载而代价高昂。

    【讨论】:

      猜你喜欢
      • 2019-02-18
      • 1970-01-01
      • 2021-04-05
      • 2016-09-16
      • 2013-09-17
      • 1970-01-01
      • 2011-08-26
      • 2019-08-03
      • 1970-01-01
      相关资源
      最近更新 更多