electron launcher
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

83 lines
2.9 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. # 项目介绍
  2. ## 如何通过electron调起外部应用
  3. 该场景适用于从网页中发起外部程序调用请求,并获取外部程序执行结果。(目前通过electron打开的网页均禁止了node执行,所以没法直接在项目中使用ipcRenderer,均通过preload中暴露的方法`window.api`)
  4. ```javascript
  5. // 发起调用命令
  6. window.api.send('spawn', {
  7. command: 'ls',
  8. args: null, // ['--disable-cache'] 多参数通过数组方式传递
  9. key: + new Date, // 唯一key,用于推送后续执行结果时进行关联
  10. })
  11. // 接收执行结果
  12. window.api.on('spawn-success', (event, { pid, key, data }) => {
  13. // pid 为以上调起程序后的pid(用于后续主动kill)
  14. // key 为调起时传递的key
  15. // data 为执行程序的输出
  16. })
  17. // 执行异常
  18. window.api.on('spawn-error', (event, { key, err }) => {
  19. // key 为调起时传递的key
  20. // err 为错误信息
  21. })
  22. // 主动关闭程序
  23. window.api.send('kill-process', [pid]);
  24. ```
  25. ## 如何和外部程序进行通信(双向)
  26. 该场景适用于在网页内监听外部程序发送的消息,并且向外部程序推送消息。
  27. ```javascript
  28. // 接收外部程序的消息,如openMap通道(具体的通道配置请参考ipc.js)
  29. window.api.on('openMap', (event, data) => {
  30. // data 为json格式
  31. })
  32. // 监听自定义通道,如custom-xxx(完全自定义,具体的名字可以和外部程序商量)
  33. window.api.on('custom-xxx', (event, data) => {})
  34. // 向外部程序推送消息
  35. /**
  36. * 其中channel为必传参数,标识应该往哪个通道推送消息
  37. * 剩下的数据会原封不动的通过JSON序列化之后进行传递
  38. */
  39. window.api.send('publisMessage', {
  40. channel: 'custom-xxx',
  41. author: 'application',
  42. id: 1,
  43. })
  44. ```
  45. ## 如何进行渲染进程(多窗口)间通信
  46. 该场景适用于通过electron打开的多窗口之间进行通信的方法。
  47. ```javascript
  48. // 通过框架中转消息(广播,不会广播给发送者自己)
  49. window.api.send('bridge', {
  50. channel: 'map-connection', // 必传参数,完全自定义,框架会自动广播该事件
  51. targetId: 'appid', // 可选参数,如果指定了目标对象则为单向通信,指定给MAIN通信:`Symbol("MAIN_WINDOW")`
  52. mapData: {}, // 剩下的参数会直接透传
  53. })
  54. // 以上面的事件为例,在其他应用中监听该事件达到事件通信的目的
  55. window.api.on('map-connection', (event, data) => {})
  56. ```
  57. ## 如何通过框架以新窗口的形式打开应用
  58. 该场景适用于做多屏展示效果,即通过打开多个窗口的形式同时展示多个应用,结合上面的应用间通信方法可以做到多屏互动的效果。
  59. ```javascript
  60. // 手动打开一个窗口(可以是框架、也可以是应用本身)
  61. window.api.send('openWindow', {
  62. id: 'TIS_PLATFORM_KT', // 必传,标识窗口唯一性的,传递多次只会打开一个实例
  63. entry: 'http://localhost:7001/', // 必传,访问地址
  64. });
  65. ```