在预加载脚本中调用 ipc 通信是一种好方法吗?

Is it good approach to call ipc communication in preload script?

刚开始学习electron。我想知道在预加载脚本中使用 ipcRenderer 调用是否是个好主意,即:

const sc = require('./StaticContent');
const dc = require('./DynamicContent');
const { ipcRenderer } = require('electron');

window.addEventListener('DOMContentLoaded', () => {
    document.getElementById('view').innerHTML = sc.getInfoPage();
    document.getElementById('menu-info').addEventListener('click', (evt) => {
        ipcRenderer.send('load-info');
    });


    ipcRenderer.on('get-view', (event, arg) => {
        document.getElementById('view').innerHTML = arg;
    });
});

我阅读的每个教程都使用外部 js 文件来管理 ipcRenderer 调用,甚至不关心 preload 脚本。但它有效。

我也可以在没有 ipc 调用的情况下实现我想要的:

window.addEventListener('DOMContentLoaded', () => {
    document.getElementById('view').innerHTML = sc.getInfoPage();
    document.getElementById('menu-info').addEventListener('click', (evt) => {
        document.getElementById('view').innerHTML = sc.getInfoPage();
    });
});

哪个更好?我不知道有什么负面影响,我只想从头学习最佳实践。

是的,您完全可以在预加载脚本中使用 ipcRenderer,您可以查看 here 的示例。

你是否应该最终取决于你的目标。

如果你需要让主进程做一些事情,那么你必须使用 ipc 从预加载脚本向主进程发送消息。如果您不需要任何主进程,并且只需要在 运行 预加载脚本的渲染器上下文中执行您的代码,那么您可以随意 运行 您的代码.

在您的情况下,在预加载脚本中执行所有 DOM 操作可能是有意义的。向主进程发送一条消息只是让它向渲染器发送一条消息以执行您的 get-view 处理程序只是无缘无故的额外工作。