从Electron中的Node.JS获取DOM javascript变量

从Electron中的Node.JS获取DOM javascript变量,javascript,html,node.js,electron,Javascript,Html,Node.js,Electron,正如标题所说,如何从electron的main.js中的DOM中获取变量 代码: value.js: var x = document.getElementById('x'); 来自ELECTRON的main.js: const {app, BrowserWindow, Menu} = require('electron') require('./value.js') // include value.js console.log(x.getValue()); 错误显示:文档未定义取决于加

正如标题所说,如何从electron的main.js中的DOM中获取变量

代码:

value.js:

var x = document.getElementById('x');
来自ELECTRON的main.js:

const {app, BrowserWindow, Menu} = require('electron')

require('./value.js') // include value.js
console.log(x.getValue());

错误显示:文档未定义取决于加载JavaScript的方式,您需要将脚本放在HTML的
结束标记之前,或者放在
窗口中。onload
JavaScript函数,由于调用
document.getElementById
时不会自动创建document对象,因此我相信您正在寻找进程间通信。虽然您也可以用于某些事情(它基本上是ipcMain和ipcRenderer的简化包装器),但我没有看到设置全局变量的方法(我自己也没有使用过)。相反,我们可以直接使用

例如,在主进程中可以有以下侦听器:

let ipc = require('electron').ipcMain,
    test = 0;

ipc.on('setTest', (event,arg)=>{
  test = arg; // Beware of any possible user input!
  event.returnValue = test; // Required for sendSync or it hangs forever! You can send back anything here.
});

ipc.on('getTest', (event,arg)=>{
  event.returnValue = test;
});
在客户端,您可以使用以下内容:

let ipc = require('electron').ipcRenderer;

ipc.sendSync('setTest', 1);
// and/or
ipc.sendSync('getTest');
EDIT:因为DOM元素是奇怪的对象,所以在传递它之前,您可能必须使用jQuery,或者使用另一种克隆方法使其成为JSON对象(或者以更简单的形式发送您需要的内容)。或者,将内容存储在渲染器上,并通过IPC告知何时执行操作。

可能重复的内容