Javascript Electron:在加载mainWindow时使用mainWindow.WebContent.send

Javascript Electron:在加载mainWindow时使用mainWindow.WebContent.send,javascript,electron,Javascript,Electron,当用户更改主题时,我使用mainWindow.webContents.send更改DOM中的类。我还将其保存在商店中的主题下 mainWindow.webContents.send('theme:change', theme); store.set('theme', theme); 然后在renderer.js中: ipcRenderer.on('theme:change', (event, theme) => { document.querySelector('body').cla

当用户更改主题时,我使用
mainWindow.webContents.send
更改DOM中的类。我还将其保存在商店中的
主题下

mainWindow.webContents.send('theme:change', theme);
store.set('theme', theme);
然后在
renderer.js
中:

ipcRenderer.on('theme:change', (event, theme) => {
  document.querySelector('body').className = `${theme}`;
});
这将成功更改主题并将其保存在应用商店中。但是,现在我希望在启动应用程序时加载该主题,而不是返回默认主题。为此,在“准备就绪”的应用程序中,我正在执行以下操作:

mainWindow.webContents.send('theme:change', store.get('theme'));

然而,什么也没有发生。就好像没人送一样。我哪里做错了?本质上,需要做的是在应用程序加载到存储中的类时更改
body
中的类。

解决了这个问题。我不得不说:

mainWindow.webContents.once('dom-ready', () => {
    mainWindow.webContents.send('theme:change', store.get('theme'));
})

我在('dom-ready')上尝试
mainWindow.on
,这就是它不起作用的原因

那行代码(
send(…)
)是否被命中,如果是,则
store.get
是否设置为所需?如果是,则可能渲染器中的处理程序没有触发。我们可能需要更多的上下文来帮助。如果在应用程序
ready
事件触发时正确发送消息,则可能太早-可能渲染器尚未添加处理程序。。。这取决于你的代码。你有MVCE吗?它似乎没有被击中。无论我使用什么值,比如
mainWindow.webContents.send('testing')
,它都不会启动。如果我
console.log(store.get('theme'))
它会准确地打印出来。实际上,我发现了一些东西。如果我稍微耽搁一下,它就行了。DOM不能准备就绪。但是在('dom-ready')
的主窗口中包装它是不起作用的