是否可以从内存中的html字符串加载电子webContents?

时间:2017-02-03 11:02:43

标签: javascript node.js electron

我们说我有2个流程:

进程1向进程2发送一个有效的html字符串:

ipcRenderer.send('open-window-from-string', 
'<!DOCTYPE html>' + '<html>' + htmlElement.innerHTML + '</html>');

进程2(Electron Main-Process)正在尝试从该字符串打开一个新窗口:

ipc.on('open-window-from-string', (event, htmlString) => {
  const windowFromString= BrowserWindow.fromWebContents(htmlString);
}

我知道我可以将html保存为实际的html文件。这样一切都在使用时起作用:

loadURL(`file://${__dirname}/windowFromString.html`);

然而,这会导致不必要的读/写操作。

这就是我试图从htmlString中加载一个新窗口的原因。 所以问题再次出现: 是否可以从内存中的html字符串加载电子webContents?

提前感谢您的帮助。

此致 Megajin

2 个答案:

答案 0 :(得分:3)

在Chrome中,您可以通过使用数据导航网址来显示内联html网页:协议,例如data:text/html;charset=utf-8,<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>MyYTitle</title> <style type="text/css"> </style></head> <body>Hello world from Lyon, FR</body>

也许它在Electron中的作用相同。 您可以尝试使用loadURL('data:text/html;charset=utf-8,<YOUR HTML/>');打开一个窗口吗?

答案 1 :(得分:1)

好吧,也许你不能直接加载整个html。作为一种变通方法,您可以打开一个新的浏览器窗口,其内容仅为:

<html>
   <head></head>
   <body></body>
</html>

打开它之后,您可以使用browserWindow.webContents.evaluate()来加载作为String传递的实际HTML。如果需要,您可以使用webContents.reload()使更改生效。