【问题标题】:Get DOM javascript variable from Node.JS in Electron在 Electron 中从 Node.JS 获取 DOM javascript 变量
【发布时间】:2017-01-25 12:57:07
【问题描述】:
正如标题所说,如何在电子中从 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
node.js
electron
【解决方案1】:
我相信您正在寻找进程间通信。虽然您也可以将remote 用于某些事情(它基本上是 ipcMain 和 ipcRenderer 的简化包装),但我没有看到 set 全局变量的方法(而且我没有使用它我)。相反,我们可以直接使用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');
编辑: 由于 DOM 元素是奇怪的对象,您可能必须使用 jQuery 来 clone 它才能传递它,或者使用另一种克隆方法使其成为 JSON 对象(或者只是以更简单的形式发送您需要的内容)。或者,将内容存储在渲染器上,并通过 IPC 传达何时执行操作。
【解决方案2】:
根据您加载 JavaScript 的方式,您需要将脚本放置在 HTML 的 </body> 结束标记之前,或者放在 window.onload JavaScript 函数中,因为文档对象没有调用document.getElementById时自动创建。