awaken.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. 'use strict';
  2. const { app } = require('electron');
  3. /**
  4. * 应用唤醒模块
  5. */
  6. module.exports = {
  7. /**
  8. * 安装
  9. */
  10. install (eeApp) {
  11. console.log('[preload] load awaken module');
  12. const protocolInfo = eeApp.config.awakeProtocol;
  13. const PROTOCOL = protocolInfo.protocol;
  14. app.setAsDefaultProtocolClient(PROTOCOL);
  15. handleArgv(process.argv);
  16. app.on('second-instance', (event, argv) => {
  17. if (process.platform === 'win32') {
  18. handleArgv(argv)
  19. }
  20. })
  21. // 仅用于macOS
  22. app.on('open-url', (event, urlStr) => {
  23. handleUrl(urlStr)
  24. })
  25. // 参数处理
  26. function handleArgv(argv) {
  27. const offset = app.isPackaged ? 1 : 2;
  28. const url = argv.find((arg, i) => i >= offset && arg.startsWith(PROTOCOL));
  29. handleUrl(url)
  30. }
  31. // url解析
  32. function handleUrl(awakeUrlStr) {
  33. if (!awakeUrlStr || awakeUrlStr.length === 0) {
  34. return
  35. }
  36. const {hostname, pathname, search} = new URL(awakeUrlStr);
  37. let awakeUrlInfo = {
  38. urlStr: awakeUrlStr,
  39. urlHost: hostname,
  40. urlPath: pathname,
  41. urlParams: search && search.slice(1)
  42. }
  43. console.log('[awaken] [handleUrl] awakeUrlInfo:', awakeUrlInfo);
  44. }
  45. }
  46. }