electron 电子应用程序的sessionStorage和localStorage存储在哪里?

mxg2im7a  于 12个月前  发布在  Electron
关注(0)|答案(3)|浏览(140)

我正在运行一个电子应用程序,在其渲染过程中,我使用HTML5 localStorage。
我很想知道这个localStorage实际存储在我的文件系统中的什么位置(我相信它是SQLite格式的)。
我看到了浏览器localStorage存储在哪里的答案,在这里:Where the sessionStorage and localStorage stored?
我问这个问题是因为我希望能够运行这个电子应用程序的2个示例,这样每个应用程序将有不同的设置,我保存在localStorage中。
具体来说,我最感兴趣的是windows 10,但一个 Package 所有操作系统的答案将是伟大的。

2uluyalo

2uluyalo1#

它存储在AppData文件夹中,您可以通过查看require('electron').app.getPath('userData')的值找到该文件夹。
这意味着即使应用被删除,数据也会持续存在。如果您正在运行两个示例,则需要找到某种方法来区分它们,以便它们不会践踏彼此的数据。

h9a6wy2h

h9a6wy2h2#

我不得不在我的Electron应用程序中使用以下内容来让它工作:

const remote = require('electron').remote;
  const app = remote.app;
  app.getPath('userData');

字符串
但是,它存储数据的路径是:

\Local Storage\leveldb\


所以你的整个路径看起来像这样:

C:\Users\<USER-NAME>\AppData\Roaming\<APP-NAME>\Local Storage\leveldb\

日志文件:不是Sqlite DB即使浏览器(在我的情况下是FireFox)将localStorage数据存储在sqlite文件中,但Electron似乎没有。

相反,它将数据保存在一个名为000003.log的奇怪的.log文件中。
下面是我从应用程序的控制台运行三个localStorage.setItem()命令后的结果。
x1c 0d1x的数据
下面是我运行这三个命令的Electron应用程序的控制台,如果你仔细观察图像,你可以将命令与000003.log文件中的数据相匹配。


进一步证明这是存储位置/机制

如果我在控制台中运行localStorage.getItem(“fakeData”),则返回值。

但是,如果您:
1.关闭Electron应用程序(必须关闭应用程序,因为它已锁定日志文件)
1.删除(或移动)000003.log文件(或您的任何名称)
1.再次启动Electron应用程序
1.打开控制台
1.调用localStorage.getItem(“fakeData”)
你不会得到任何值返回。

现在完成循环:
1.停止您的Electron应用程序
1.将日志文件复制回leveldb\目录(必须覆盖上次启动时创建的文件)
1.启动Electron应用程序
1.打开控制台
1.再次运行localStorage.getItem()。
你会再次看到价值。

LevelDB:Google Thing

我正在考虑这个疯狂的格式,然后我想到了最后一个目录的名称(leveldb)。
所以我猜这是格式,因为电子是使用Chrome引擎。
From Wikipedia
LevelDB是一个开源的磁盘键值存储,由Google研究员Jeffrey Dean和Sanjay Ghemawat编写。受Bigtable的启发,LevelDB托管在GitHub上,遵循新BSD许可证,并已移植到各种基于Unix的系统,macOS,Windows和Android。

kkbh8khc

kkbh8khc3#

使用此代码,您可以向Help部分添加一个子部分,当单击时,它将在文件浏览器中打开Local Storage文件夹。
/electron中的main.js中:

const {
  app,
  BrowserWindow,
  screen: electronScreen,
  shell,
  Menu,
} = require('electron');
...

const menuTemplate = [
  {
    role: 'help',
    submenu: [
      {
        label: 'Open Local Storage Folder',
        click: () => {
          const userData = app.getPath('userData');
          shell.showItemInFolder(`${userData}/Local Storage/leveldb`);
        },
      },
    ],
  },
];

const menu = Menu.buildFromTemplate(menuTemplate);
Menu.setApplicationMenu(menu);

字符串

相关问题