electron's remote.getGlobal() returns "undefined" after window.location.replace()

electron, javascript, undefined, window.location

Solution

There are a few things in play here:

- The `remote` module caches remote objects in the renderer process on first access.

- Properties that are added to a remote object in the renderer process are not propagated back to the original object in the main process.

- Navigation restarts the renderer process.

With that in mind here's what's probably going on in your code:

- `remote.getGlobal('storage')` creates a new remote object and caches it.

- `remote.getGlobal('storage').exmpl = value` adds a new `exmpl` property to the remote object in the cache but doesn't propagate it to the original object in the main process.

- `window.location.replace('./general.html')` restarts the renderer process which blows away the remote object cache.

- `console.log(remote.getGlobal('storage').exmpl)` creates a new remote object since the cache is empty, but since the original object in the main process doesn't have an `exmpl` property it's also `undefined` on the new remote object.

The `remote` module seems deceptively simple at first, but it has many quirks, most of which are undocumented and as such may change in the future. I would suggest limiting the use of the `remote` module in production code.

Problem

I've been fiddling around with electron's remote module. In my main-process I've created this variable: ``` global.storage = {}; ``` My renderer-process is initialised with a file called startup.html. ``` win.loadURL('file://' + __dirname + '/startup.html') ``` In there, I include a javascript file containing the following function: ``` function enterMain(value){ remote.getGlobal('storage').exmpl = value; window.location.replace('./general.html'); } ``` The value I'm passing is "hello", and when calling upon... ``` console.log(remote.getGlobal('storage').exmpl); ``` ...after assigning the value it returns "hello", as it should. However, once the window location has been replaced to general.html, in which I include a javascript file containing this function: ``` $(document).ready(function(){ console.log(remote.getGlobal('storage').exmpl); }); ``` ...it returns undefined. Why? Can anyone help me make sense of this?

Original source