使用IndexedDB打开Web应用程序(Electron)的两个实例

问题描述 投票:1回答:3

在我的基于Electron的网络应用程序中,我使用了IndexedDB。如果我将整个项目复制到一个单独的目录并在原始副本运行时运行它,则IndexedDB API会抱怨它无法打开数据库。只有当我关闭第一个应用程序时,第二个应用程序才能正常运行。

这引发了关于IndexedDB如何处理文件的问题。即使我给每个数据库自己的名字,问题仍然存在。 Electron使用文件协议访问URL。 IndexedDB如何处理不使用文件协议而非http / https的普通Web应用程序?显然,每个应用程序都有自己的数据库,可以访问它而不会与其他数据库冲突。那么为什么基于文件的Web应用程序的行为会有所不同?有什么办法可以让我的应用程序的两个副本都使用单独的indexedDB数据库吗?

electron indexeddb
3个回答
0
投票

这个thread提到了HTML5 localStorage可能的solution

顺便说一句,我能够启动应用程序的两个实例,其中每个实例加载存储在localStorage中的不同设置,就是使用不同的域启动每个实例,例如localhost上的不同端口 - 因此每个端口都接收不同的localStorage。

这可能是IndexedDB的方法......


0
投票

Electron的正确解决方案是使用:

setPath(“userData”,[some path]);

这需要在主进程中运行,并且应该是在创建任何窗口之前完成的第一件事之一或者其他任何事情。看到:

https://github.com/electron/electron/blob/master/docs/api/app.md

任何文件或缓存数据都将存储在您使用setPath定义的路径下。


0
投票

在浏览器中运行应用程序时不会发生此问题。问题在于Electron,而不是浏览器。此外,只要它们使用不同的IndexedDB数据库名称,就可以同时运行两个不同的Exlectorn应用程序。

无法同时针对同一个IndexedDB运行两个Electron应用程序,因为IndexedDb将被第一个应用程序/实例锁定。

从文档中,似乎可以通过在初始化应用程序时调用“app.setPath(name,path)”来规避这一点。但是,这会产生两个不同的IndexedDB数据库,包含不同的数据。此外,这将导致LocalStorage开始重复。如果您只是临时存储数据,那么此解决方案可能适合您。

© www.soinside.com 2019 - 2024. All rights reserved.