如何使克隆的DOM元素JSON可序列化

时间:2016-03-12 01:39:41

标签: javascript json dom ipc electron

我目前正在使用GitHub's Electron框架,并且我尝试通过webview系统从Object {}中的预加载脚本发送克隆的DOM元素到我的渲染器过程。但是,DOM元素无法转换为JSON,因此收到的消息将打印出一个空对象( var ipc = require("electron").ipcRenderer; function getData(element, trait){ if(trait === "id"){ var elem = document.getElementById(element); } else{ var elem = document.getElementsByClass(element); } var cloned = elem.cloneNode(true); ipc.sendToHost("retrieve", cloned); console.log("sent"); } ipc.on("incoming", function(event, initData){ getData(initData.selected, initData.trait); }); )。这是我的代码:

Preload.js

loader.addEventListener("ipc-message", function (e) {
  if (e.channel === "retrieve") {
    console.log(e.args[0]);   // I want this to print out the DOM object
  }
});     

loader.addEventListener("dom-ready", function() {
  console.log("loaded");    
  var x = marks.list[i];
  loader.send("incoming", x);    
  loader.openDevTools();
  i++;    
});

Renderer.js

initData.selected

我无法从DOM中选择我需要的东西,因为我需要 {{1}}元素中的所有内容及其附加内容CSS。

有可能解决这个问题吗?如果没有,那么有没有办法在这两个进程之间发送一个DOM元素,可能还有另一个程序或node.js模块?感谢。

1 个答案:

答案 0 :(得分:0)

如果IPC只接受字符串参数,那么您应该发送HTML,这意味着,使用

ipc.sendToHost("retrieve", cloned.outerHTML);

然后这个

var html = e.args[0],
    dummy = document.createElement('div'),
    cloned;
dummy.innerHTML = html;
// this will give you the node that you sent with all the inline CSS
cloned = dummy.childNodes[0];

console.log(cloned );

注意:我们只能传递内联样式,在文档级加载的CSS无法用html序列化