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

Javascript 如何使克隆的DOM元素JSON可序列化,javascript,json,dom,ipc,electron,Javascript,Json,Dom,Ipc,Electron,我目前正在使用framework,我正试图通过系统将一个克隆的DOM元素从webview中的预加载脚本发送到我的渲染器进程。尽管如此,DOM元素无法转换为JSON,因此收到的消息打印出一个空对象(Object{})。这是我的密码: Preload.js var ipc = require("electron").ipcRenderer; function getData(element, trait){ if(trait === "id"){ var elem = document

我目前正在使用framework,我正试图通过系统将一个克隆的DOM元素从
webview
中的预加载脚本发送到我的渲染器进程。尽管如此,DOM元素无法转换为JSON,因此收到的消息打印出一个空对象(
Object{}
)。这是我的密码:

Preload.js

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);
});
Renderer.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++;    
});
我不能只从DOM中挑选我需要的东西,因为我需要
initData.selected
的元素和附加的CSS中的所有东西


有没有可能解决这个问题?如果没有,那么是否有任何方法可以在这两个进程之间发送DOM元素,可能是使用另一个程序或node.js模块?谢谢。

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

ipc.sendToHost(“检索”,克隆.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序列化