Electron "ready-to-show" 事件未按预期工作

Electron "ready-to-show" event not working as expected

这是我的应用程序中的一段代码 Codey

src/main.py

// Show window once it has finished initialising
docsWindow.once("ready-to-show", () => {
  if (darkMode) {
    docsWindow.webContents.send("dark-mode:toggle");
  }

  if (!isDarwin) {
    docsWindow.webContents.send("platform:not-darwin");
  }

  docsWindow.webContents.send("docs:jump", section);

  docsWindow.show();
});

src/docs/renderer.js

window.api.darkMode.toggle.receive(toggleDarkMode);

当 darkMode = true 时,toggleDarkMode 永远不会 运行。

我的应用程序有两个不同的 windows - 一个编辑器和一个文档 window。对于这两个 windows,在“ready-to-show”事件中,“dark-mode:toggle”被发送到渲染器进程。但是,文档 window 无法 运行 toggleDarkMode 函数,而它适用于编辑器 window.

注意:应用程序必须使用“yarn package”打包,因为某些功能在开发环境中不起作用。

任何帮助将不胜感激。

(回购:https://github.com/Liamohara/Codey

对于任何感兴趣的人。我找到了解决问题的方法。

src/main.py

     // Show window once it has finished initialising
-    docsWindow.once("ready-to-show", () => {
+    docsWindow.webContents.once("did-finish-load", () => {
       if (darkMode) {
         docsWindow.webContents.send("dark-mode:toggle");
       }
    
       if (!isDarwin) {
         docsWindow.webContents.send("platform:not-darwin");
       }
    
       docsWindow.webContents.send("docs:jump", section);
    
       docsWindow.show();
     });

在文档 window 中,与编辑器 window 相比,要呈现的内容 HTML 多。因此,DOM 需要更长的时间来加载并且“ready-to-show”事件在完成之前发出。使用“did-finish-load”事件,确保 API 函数在 DOM 完成加载之前不会被调用。