awaken.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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. console.log('[electron-lib-awaken] [setup]');
  10. const protocolInfo = config.get('awakeProtocol');
  11. const PROTOCOL = protocolInfo.protocol;
  12. // 唤醒的协议详情,开发者可根据所带参数,开发额外功能
  13. let awakeUrlInfo = {}
  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. eLogger.info('[awaken] [handleUrl] url:', awakeUrlStr);
  34. if (!awakeUrlStr || awakeUrlStr.length === 0) {
  35. return
  36. }
  37. const {hostname, pathname, search} = new URL(awakeUrlStr);
  38. awakeUrlInfo = {
  39. urlStr: awakeUrlStr,
  40. urlHost: hostname,
  41. urlPath: pathname,
  42. urlParams: search && search.slice(1)
  43. }
  44. eLogger.info('[awaken] [handleUrl] awakeUrlInfo:', awakeUrlInfo);
  45. }
  46. }
  47. exports = module.exports;