我目前正在使用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模块?感谢。
答案 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序列化