远程Angular应用程序与Electron桌面应用程序之间的通信

时间:2019-06-21 06:34:23

标签: angular electron ipc communication

情况如下:

  • 部署在外部服务器中的Angular应用
  • 在本地运行的台式电子应用程序为远程URL(从其中提供Angular的URL)提供服务

是否可以使用电子API与Angular应用程序中的OS进行交互?我确实认为IPC无法运行,因为它们不在同一实例上运行,但是我想知道是否有人可以提出其他解决方案。

谢谢哈维

2 个答案:

答案 0 :(得分:0)

经过一些研究,在Angular应用程序中使用IPC似乎是可行的。

由于Angular应用是在Renderer Process中呈现的,因此可以调用ipcRenderer模块以进行此类通信:

在电子应用程序的Main Process中:

const { ipcMain } = require('electron');

ipcMain.on('customChannel', (event, args) => {
  console.log('event: ', event);
  console.log('args: ', args);
});

在Angular应用程序上,在组件上:

// Component implementing OnInit

ngOnInit(): void {
 if ((<any>window).require) {
   try {
    const ipc = (<any>window).require('electron').ipcRenderer;
    ipc.send('customChannel', 'this is a test');
   } catch (error) {
    throw error;
   }
  } else {
     console.warn('Could not load electron ipc');
  }
}

答案 1 :(得分:0)

看起来在上面的示例中,远程 Web 应用程序安装了电子。如果有人想在不依赖于网络应用程序的情况下进行通信,那么我们可以使用 contextBridge。

在您的电子应用程序中

const { contextBridge, ipcRenderer } = require('electron')

contextBridge.exposeInMainWorld(
  'electron',   //This will be exposed as window.electron in your remote app
  {
    doThing: () => ipcRenderer.send('do-a-thing')
  }
)

在您的远程应用中

window.electron.doThing()

来源https://www.electronjs.org/docs/api/context-bridge