J'ai une application angular en cours d'exécution autonome, et j'essaie de créer une application d'électrons qui fait alors simplement: mainWindow.loadURL('http://localhost:4200/');
Ce n'est que localhost pour mon environnement de développement, cela le conditionne en réalité ne sera pas.
En électron, je règle nodeIntegration sur true, ce qui permet à mon application angular) d'accéder à ipc.
const mainWindow = new BrowserWindow({
webPreferences: {
nodeIntegration: true,
}
});
Dans angular j'ai ma fonction ping-pong:
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);
}
}
Les erreurs d'application après la connexion de ipcRenderer avec l'erreur du titre:
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)
Merci d'avance!
J'ai eu le même problème. Je crois que lorsque vous utilisez ipcRenderer.sendSync
il attend une valeur de retour.
par exemple.
sendSync
du moteur de renduipcRenderer.sendSync("pong_channel", { type: "ping"});
Ce code vient d'envoyer un message au processus principal avec un identifiant de canal de pong_channel
et un objet json.
.on
AuditeuripcMain.on("pong_channel", (event, args) => {
if(args.type === "pong") {
print("Received pong successfully!")
}
event.returnValue = "received";
});
Le processus principal consiste à écouter sur le canal et à exécuter un effet secondaire. Mais le point clé est qu'il a renvoyé une valeur par event.returnValue. J'étais confronté au même problème, mais il a disparu une fois que j'ai défini la valeur returnValue.
J'ai aussi généralement mes noms de chaînes dans deux énumérations. Un contenant tous les messages adressés au processus principal et l'autre tous les messages adressés au moteur de rendu. Cela permet de garder les choses plus ordonnées qu'une chaîne.
J'espère que ça aide!