javascript - 在 Electron 中使用 ipc 从渲染器设置全局变量

标签 javascript html node.js electron

渲染器.js

ipcRenderer.sendSync('setGlobal', 'globalVarName').varInner.varInner2 = 'result';

主要.js

global.globalVarName = {
  varInner: {
    varInner2: ''
  },
  iWontChange: 'hi'
};

ipcMain.on('setGlobal', (event, arg) => {
  console.log(arg) // should print "result"
  // what goes here?
})

console.log(varInner2) // should print "result"

是否可以这样,即以这种方式设置 globalVarNamevarInner2?其次,有没有办法优化这个,这样我们就不必为每个全局变量重写这个过程(即用动态变量名来做这个的某种方法)?

我很感激任何想法或解决方案,如果这是一个常识性问题,我很抱歉。

最佳答案

使用 IPC 设置全局值。

当您只对读取全局变量的值感兴趣时,使用 getGlobal 效果很好。但是,我发现尝试使用 getGlobal 分配或更改其值是有问题的。

在我的例子中,我发现主进程上的全局变量并没有实际改变。具体来说,在开发中刷新 Electron 窗口时,全局变量被设置回原来的值。这使得恢复开发状态成为一个问题。

不确定这是否也发生在生产中,但我想它会发生,因此启动依赖于全局变量的最新值的新流程将是有问题的。

相反,我最终使用了更冗长的方法 ipcMainipcRenderer

ma​​in.js

const { ipcMain } = require( "electron" );

ipcMain.on( "setMyGlobalVariable", ( event, myGlobalVariableValue ) => {
  global.myGlobalVariable = myGlobalVariableValue;
} );

renderer.js

const { ipcRenderer, remote } = require( "electron" );

// Set MyGlobalVariable.
ipcRenderer.send( "setMyGlobalVariable", "Hi There!" );

// Read MyGlobalVariable.
remote.getGlobal( "MyGlobalVariable" ); // => "Hi There!"

关于javascript - 在 Electron 中使用 ipc 从渲染器设置全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49715862/

相关文章:

javascript - 无法通过javascript为DOM元素设置渐变颜色

html - 当背景颜色应用于父元素时,CSS 开关输入文本不可见

HTML/CSS : display images from linux localhost(firefox)

mysql - 如何在 Windows 上的 Node.js 中开始 MySQL 工作?

node.js - NodeJS - 循环内的 Promise

javascript - 在不需要的字符出现之前从文本输入中删除它们

javascript - redux-thunk结构和测试副作用

javascript - 无法重现 TypeError : 'undefined' is not an object

.net - 从图像中删除下划线

node.js - 在 firebase 云函数中创建方形缩略图