我一直在摆弄电子的远程模块。 在我的主要过程中,我创建了这个变量:
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 。 为什么?任何人都可以帮我理解这个吗?
答案 0 :(得分:8)
这里有一些事情可以发挥作用:
remote
模块在首次访问时缓存渲染器进程中的远程对象。考虑到这一点,你的代码可能会发生什么:
remote.getGlobal('storage')
创建一个新的远程对象并对其进行缓存。remote.getGlobal('storage').exmpl = value
将新的exmpl
属性添加到缓存中的远程对象,但不会将其传播到主进程中的原始对象。window.location.replace('./general.html')
重新启动渲染器进程,该进程会远离对象缓存。console.log(remote.getGlobal('storage').exmpl)
创建一个新的远程对象,因为缓存为空,但由于主进程中的原始对象没有exmpl
属性,因此新远程对象上也是undefined
对象。 remote
模块起初看起来似乎很简单,但它有许多怪癖,其中大多数都没有记录,因此将来可能会发生变化。我建议限制在生产代码中使用remote
模块。