电子的remote.getGlobal()返回" undefined"在window.location.replace()

时间:2016-10-23 10:53:35

标签: javascript undefined electron window.location

我一直在摆弄电子的远程模块。 在我的主要过程中,我创建了这个变量:

global.storage = {};

我的渲染器进程初始化了一个名为startup.html的文件。

win.loadURL('file://' + __dirname + '/startup.html')

在那里,我包含一个包含以下功能的javascript文件:

function enterMain(value){
    remote.getGlobal('storage').exmpl = value;
    window.location.replace('./general.html');
}

我传递的价值是"你好",并且在调用时......

console.log(remote.getGlobal('storage').exmpl);

...在分配值后,它返回" hello",就像它应该的那样。但是,一旦窗口位置被替换为general.html,其中我包含一个包含此功能的javascript文件:

$(document).ready(function(){
     console.log(remote.getGlobal('storage').exmpl);
});

...它返回 undefined 。 为什么?任何人都可以帮我理解这个吗?

1 个答案:

答案 0 :(得分:8)

这里有一些事情可以发挥作用:

  • remote模块在​​首次访问时缓存渲染器进程中的远程对象。
  • 在渲染器进程中添加到远程对象的属性不会传播回主进程中的原始对象。
  • 导航重新启动渲染器进程。

考虑到这一点,你的代码可能会发生什么:

  1. remote.getGlobal('storage')创建一个新的远程对象并对其进行缓存。
  2. remote.getGlobal('storage').exmpl = value将新的exmpl属性添加到缓存中的远程对象,但不会将其传播到主进程中的原始对象。
  3. window.location.replace('./general.html')重新启动渲染器进程,该进程会远离对象缓存。
  4. console.log(remote.getGlobal('storage').exmpl)创建一个新的远程对象,因为缓存为空,但由于主进程中的原始对象没有exmpl属性,因此新远程对象上也是undefined对象。
  5. remote模块起初看起来似乎很简单,但它有许多怪癖,其中大多数都没有记录,因此将来可能会发生变化。我建议限制在生产代码中使用remote模块。