web-dev-qa-db-ja.com

Electron:エラー:無効なバージョンまたはサポートされていないバージョンが原因で、クローンデータをデシリアライズできません

私はangularアプリケーションをスタンドアロンで実行していて、次のような電子アプリを作成しようとしています:mainWindow.loadURL('http://localhost:4200/');これは私の開発環境のローカルホストにすぎません。ありません。

Electronでは、nodeIntegrationをtrueに設定しています。これにより、angularアプリがipcにアクセスできるようになります。

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

angular私にはピンポン機能があります:

  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)

前もって感謝します!

5
John Wyant

同じ問題がありました。 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つの列挙型でチャンネル名も持っています。 1つはメインプロセスへのすべてのメッセージを持ち、もう1つはレンダラーへのすべてのメッセージを持ちます。これにより、文字列よりも整然としています。

これが役に立てば幸いです!

2
b-zurg