【问题标题】:Electron : How to access webview inside a webpage which is rendered in the render process from the main process (toPrint , etc)?Electron:如何访问在主进程(toPrint 等)的渲染进程中渲染的网页内的 webview?
【发布时间】:2017-11-14 06:54:48
【问题描述】:

我正在尝试获取我在远程托管的网页中提供的 webview 的引用,并将此网页加载到我的电子应用程序中。

由于我需要 webContents 实例静默打印,我想要引用页面内 webview 的 webContents。

这里的限制是,打印应该是主进程驱动的,而不是由网页自己处理的。

如何做到这一点?

【问题讨论】:

    标签: javascript node.js webview electron chromium


    【解决方案1】:

    现在我正在使用廉价的脏黑客,将 webview 的 id 发送到主进程,然后使用 webContents.executeJavascript 执行以下脚本 document.getElementById("'+id+'").print(silent: true) 。现在至少要打印的内容在 mainProcess 的控制之下。 如果有人有更清洁的方法来做到这一点,请告诉我。 提前致谢。

    【讨论】:

    • 暂时将此标记为答案,直到找到更好的清洁解决方案。
    【解决方案2】:

    您可以访问 webview 并从渲染器进程打印其内容。 首先将 webview 存储在一个变量中:

    const webview = document.getElementById('webview');
    

    那么你可以这样做:

    webview.print({silent: true});
    

    在文档中:https://electron.atom.io/docs/api/webview-tag/#webviewprintoptions

    修改

    如果您想从主进程访问 webContents,您可以:

    webview.getWebContents().send('print');
    

    在主进程中:

    ipcMain.on('print', (event) => {
      event.sender.webContents.print({silent: true});
    });
    

    【讨论】:

    • 感谢您的回复,我知道可以从渲染器进程轻松完成。但我真正想要的是这个打印代码应该在主进程的代码库中,而不是在渲染器进程中。为此,我需要主 Process 中的 webview 引用。这甚至可能吗?
    • 好的,我明白了。我会修改我的答案。
    • 检查修改并告诉我它是否适合你
    • 对不起,它对我不起作用,在修改后的情况下,ipcMain 的打印事件甚至没有被触发。根据文档 webview.send 事件应该由渲染器进程监听,然后它应该将其发送到主进程。
    猜你喜欢
    • 2017-05-01
    • 1970-01-01
    • 2018-01-05
    • 2019-10-27
    • 2017-06-01
    • 2020-04-09
    • 1970-01-01
    • 2018-05-29
    • 2019-05-14
    相关资源
    最近更新 更多