javascript - electron 的 remote.getGlobal() 在 window.location.replace() 之后返回 "undefined"

标签 javascript undefined electron window.location

我一直在摆弄 Electron 的远程模块。 在我的主进程中,我创建了这个变量:

global.storage = {};

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

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

在那里,我包含了一个包含以下函数的 javascript 文件:

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

我传递的值是“hello”,当调用...

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

...在分配值后,它返回“hello”,这是它应该的。但是,一旦窗口位置被替换为 general.html,我在其中包含一个包含此函数的 javascript 文件:

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

...它返回未定义。 为什么?任何人都可以帮助我理解这一点吗?

最佳答案

这里有几件事在起作用:

  • 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

remote 模块乍一看看似简单,但它有很多怪癖,其中大部分没有记录,因此将来可能会改变。我建议限制在生产代码中使用 remote 模块。

关于javascript - electron 的 remote.getGlobal() 在 window.location.replace() 之后返回 "undefined",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40202110/

相关文章:

javascript - JavaScript 如何在后台处理 AJAX 响应?

javascript - iOS 中的电子书使用 CSS 多列(计算不同列中的文本范围)

javascript - 为什么这个 'undefined' 出现在 HTML 中?

javascript - 无法关闭 Electron 窗口

electron - 如何在Spectron的新Application()中访问webdriver和chromedriver选项?

javascript - 切换到 html5 模式时 Angular anchor 断裂

javascript - 用 html 内容替换 ChildNode 值

javascript - Uncaught ReferenceError : isApp is not defined

JavaScript 闭包。输入未定义值会停止脚本。有时

javascript - 如何使用 Electron-json-storage 将 json 发送回 Angular