如何在两个窗口之间共享单例类的实例

时间:2018-06-24 06:45:14

标签: singleton electron instance share

我正在使用小型电子应用,我想问一个小问题。

我需要在应用程序的两个不同窗口之间共享一个单例类实例。 “共享”表示具有每个类的实例,并且实例的变量相同。

我在BrowserWindow()构造函数中使用了亲和力参数,以在同一渲染器进程中运行两个窗口。我想如果两个窗口在同一进程中运行,则两个窗口共享该实例。但是实际上,实例和实例的值是不同的。

这是正确的行为吗?
1.如果是这样,您能告诉我另一种在两个窗口之间共享实例的方法吗?
2.如果不是,这是一个错误吗?还是我需要设置另一个参数?

2 个答案:

答案 0 :(得分:0)

affinity选项将控件公开给铬的过程模型(https://github.com/electron/electron/issues/11484 / https://www.chromium.org/developers/design-documents/process-models),而Chrome的过程模型均不允许共享宿主页面的上下文。在单个进程中运行两个站点并不一定意味着两个托管站点共享上下文,特别是它暴露了整个安全问题。

对于电子中的单子来说,没有任何东西,至少是通过电子支撑的api表面以开箱即用的方式支撑的。尽管不是真正的共享,但通过ipc进行同步几乎是唯一的方法。

答案 1 :(得分:0)

我使用window.open()方法来创建新的BrowserWindow,当使用这个方法时,你可以通过window来paas你的javascript单例类

render-process

 const modal = window.open(filePath, 'xxx');
 modal.window.singletonClass = window.singletonClass;

main process

 mainWindow.webContents.on('new-window', ()=> {});