【问题标题】:How to share an instance of a singleton class between two windows如何在两个窗口之间共享单例类的实例
【发布时间】:2018-06-24 06:45:13
【问题描述】:

我正在处理小型电子应用程序,我想问一个小问题。

我需要在我的应用程序的不同两个窗口之间共享一个单例类实例。 “共享”是指每个类的实例相同,实例的变量也相同。

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

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

【问题讨论】:

    标签: singleton electron instance share


    【解决方案1】:

    affinity 选项将控制权暴露给 chromimum 的进程模型 (https://github.com/electron/electron/issues/11484 / https://www.chromium.org/developers/design-documents/process-models),并且 chromium 的进程模型都不允许共享托管页面的上下文。在单个进程中运行两个站点并不一定意味着两个托管站点共享上下文,尤其是它暴露了整个安全问题。

    电子中没有单例,至少通过电子支持的 api 表面的开箱即用支持方式。虽然这不是真正的共享,但通过 ipc 同步几乎是唯一的方法。

    【讨论】:

    • 感谢您的回复。我知道即使两个窗口在同一个进程中运行,上下文也不会共享。我很抱歉我缺乏知识,但我希望你能告诉我有关上下文的信息。上下文是指实例还是该实例中保存的变量?
    【解决方案2】:

    我使用window.open() 方法创建新的BrowserWindow,当使用此方法时,您可以通过window 为您的javascript 单例类paas

    render-process

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

    main process

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-05
      • 1970-01-01
      • 1970-01-01
      • 2017-03-20
      • 1970-01-01
      • 1970-01-01
      • 2015-09-11
      相关资源
      最近更新 更多