logger.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import { logApi, reportFrontLogApi } from '@/http/logApi'
  2. import { getBrowser } from '@/uilts/help.js';
  3. import { logType } from './logEnum.js';
  4. import { getChromeStorage } from '@/uilts/chromeExtension'
  5. let userInfo = null;
  6. let mid = '';
  7. /**
  8. * @eventData 以键值对存储,会在最终上报里解开的参数
  9. * @extParams 最终上报到阿里云以json字符串存储的参数,如果extparams传入的不是obj会转换成obj
  10. */
  11. export async function reportLog(eventData = {}, extParams = {}) {
  12. if (!userInfo) {
  13. userInfo = await getChromeStorage('userInfo') || null;
  14. }
  15. if (!mid) {
  16. mid = await getChromeStorage('mid') || '';
  17. }
  18. if (chrome && chrome.tabs) {
  19. chrome.tabs.getCurrent((tab) => {
  20. if (tab && tab.url) {
  21. let isMobile = navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i);
  22. let { url = '' } = tab;
  23. let platform = isMobile ? `mobile` : `pc`;
  24. let browser = getBrowser();
  25. let extData = {
  26. url,
  27. platform,
  28. browser,
  29. twitterId: userInfo && userInfo.nickName || '',
  30. ...eventData,
  31. }
  32. paramsPretreatmentAndRequest(logType.denet, extData, extParams)
  33. }else{
  34. paramsPretreatmentAndRequest(logType.denet, eventData, extParams)
  35. }
  36. })
  37. } else {
  38. paramsPretreatmentAndRequest(logType.denet, eventData, extParams)
  39. }
  40. }
  41. function paramsPretreatmentAndRequest(logType, eventData, extParams) {
  42. extParams = wrapObject(extParams)
  43. let obj = {};
  44. let pageSource = eventData.pageSource;
  45. if (eventData.hasOwnProperty('pageSource')) {
  46. delete eventData.pageSource;
  47. }
  48. obj.logType = logType;
  49. obj.eventData = JSON.stringify(eventData)
  50. obj.extParams = JSON.stringify(extParams)
  51. logApi({
  52. params: {
  53. pageSource,
  54. ...obj
  55. }
  56. }).then(res => {
  57. }).catch(err => {
  58. reportFrontLogApi({
  59. logData: JSON.stringify(err)
  60. })
  61. })
  62. }
  63. function wrapObject(extParams) {
  64. if (typeDecide(extParams, 'Object')) {
  65. return extParams
  66. }
  67. return { 'defaultExt': extParams }
  68. }
  69. /**
  70. * 检测对象类型
  71. */
  72. function typeDecide(o, type) {
  73. return Object.prototype.toString.call(o) === `[object ${type}]`;
  74. }