【问题标题】:Electron: Error: Unable to deserialize cloned data due to invalid or unsupported versionElectron:错误:由于版本无效或不受支持,无法反序列化克隆数据
【发布时间】:2020-06-26 05:08:15
【问题描述】:

我有一个独立运行的 Angular 应用程序,并且正在尝试创建一个电子应用程序,然后它就可以运行:mainWindow.loadURL('http://localhost:4200/'); 它只是我的开发环境的本地主机,它不会是真实条件。

在电子中,我将 nodeIntegration 设置为 true,这允许我的 Angular 应用访问 ipc。

const mainWindow = new BrowserWindow({
    webPreferences: {
      nodeIntegration: true,
    }
  });

在角度我有我的乒乓球功能:

  public playPingPong() {
    if(this._electronService.isElectronApp) {
      console.log('Is electron.')
      console.log(this._electronService.ipcRenderer);
      let pong: any = this._electronService.ipcRenderer.sendSync('ping', 'ping');
      console.log(pong);
    }
  }

在使用标题中的错误记录 ipcRenderer 后,应用程序出现错误:

core.js:5845 ERROR Error: Unable to deserialize cloned data due to invalid or unsupported version.
    at EventEmitter../lib/renderer/api/ipc-renderer.ts.ipcRenderer.sendSync (ipc-renderer.ts:13)
    at ArcMapComponent.playPingPong (arc-map.component.ts:61)
    at ArcMapComponent.ngOnInit (arc-map.component.ts:164)
    at callHook (core.js:3909)
    at callHooks (core.js:3873)
    at executeInitAndCheckHooks (core.js:3814)
    at refreshView (core.js:11723)
    at refreshDynamicEmbeddedViews (core.js:13070)
    at refreshView (core.js:11728)
    at refreshComponent (core.js:13145)

提前谢谢你!

【问题讨论】:

  • 你找到这个问题的答案了吗?我使用 Angular Electron 得到完全相同的错误消息。最新版本的 Angular/Electron/NodseJs。我正在使用最新版本的 ngx-electron...
  • 使用 ipcRenderer.send 而不是 ipcRenderer.sendSync 似乎可以解决我的错误。

标签: angular electron angular9


【解决方案1】:

我遇到了同样的问题。我相信当您使用 ipcRenderer.sendSync 时,它会期望返回值。

例如

渲染器sendSync消息

ipcRenderer.sendSync("pong_channel", { type: "ping"});

这段代码只是向主进程发送了一条消息,通道标识符为pong_channel和一个json对象。

.on监听器

ipcMain.on("pong_channel", (event, args) => {
    if(args.type === "pong") {
        print("Received pong successfully!")
    }
    event.returnValue = "received";
});

主进程正在监听通道并执行了一个副作用。但关键是它通过event.returnValue返回了一个值。我遇到了同样的问题,但是一旦我设置了returnValue,它就消失了。

我的频道名称通常也包含在两个枚举中。一个将所有消息发送到主进程,另一个将所有消息发送到渲染器。这比字符串更整洁。

我希望这会有所帮助!

【讨论】:

    【解决方案2】:

    我遇到了错误,因为我在调用 ipcRenderer.sendSync 时没有在主端设置监听器。

    在我的代码中,这是由 Exception 停止主线程上的执行并阻止注册侦听器引起的。但我想如果您在发送者或侦听器的channel 参数上有拼写错误,也会出现同样的错误。

    【讨论】:

      猜你喜欢
      • 2021-10-30
      • 1970-01-01
      • 2020-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      • 2023-03-10
      相关资源
      最近更新 更多