awaken.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. 'use strict';
  2. const { app } = require('electron');
  3. const config = require('../config');
  4. const eLogger = require('./eLogger').get();
  5. /**
  6. * 唤起Electron应用
  7. */
  8. exports.setup = function () {
  9. const protocolInfo = config.get('awakeProtocol');
  10. const PROTOCOL = protocolInfo.protocol;
  11. // 唤醒的协议详情,开发者可根据所带参数,开发额外功能
  12. let awakeUrlInfo = {}
  13. app.setAsDefaultProtocolClient(PROTOCOL);
  14. handleArgv(process.argv);
  15. app.on('second-instance', (event, argv) => {
  16. if (process.platform === 'win32') {
  17. handleArgv(argv)
  18. }
  19. })
  20. // 仅用于macOS
  21. app.on('open-url', (event, urlStr) => {
  22. handleUrl(urlStr)
  23. })
  24. // 参数处理
  25. function handleArgv(argv) {
  26. const offset = app.isPackaged ? 1 : 2;
  27. const url = argv.find((arg, i) => i >= offset && arg.startsWith(PROTOCOL));
  28. handleUrl(url)
  29. }
  30. // url解析
  31. function handleUrl(awakeUrlStr) {
  32. eLogger.info('[awaken] [handleUrl] url:', awakeUrlStr);
  33. if (!awakeUrlStr || awakeUrlStr.length === 0) {
  34. return
  35. }
  36. const {hostname, pathname, search} = new URL(awakeUrlStr);
  37. awakeUrlInfo = {
  38. urlStr: awakeUrlStr,
  39. urlHost: hostname,
  40. urlPath: pathname,
  41. urlParams: search && search.slice(1)
  42. }
  43. eLogger.info('[awaken] [handleUrl] awakeUrlInfo:', awakeUrlInfo);
  44. }
  45. }
  46. exports = module.exports;