From fbf807cde84b90aa74eb5b7dff897a4c85b77984 Mon Sep 17 00:00:00 2001 From: TaoHuang <ht.anglenx@gmail.com> Date: Tue, 12 Nov 2019 11:06:21 +0800 Subject: [PATCH] feat(report):fix report --- apps/common/report-error-client.js | 2 +- apps/pages/home/channel/channel.vue | 30 +++++++++++++++++++++++------- apps/store/yoho/index.js | 68 ++++++++++++++++++++++++++++++++++++++++++++++---------------------- apps/utils/init-client.js | 3 +++ apps/utils/yas/config.js | 17 +++++++++++++++++ apps/utils/yas/cross.js | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ apps/utils/yas/util.js | 17 +++++++++++++++++ apps/utils/yas/ya.js | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 209 insertions(+), 30 deletions(-) create mode 100644 apps/utils/yas/config.js create mode 100644 apps/utils/yas/cross.js create mode 100644 apps/utils/yas/util.js create mode 100644 apps/utils/yas/ya.js diff --git a/apps/common/report-error-client.js b/apps/common/report-error-client.js index 88b1fbe..6926d05 100644 --- a/apps/common/report-error-client.js +++ b/apps/common/report-error-client.js @@ -36,7 +36,7 @@ export default context => { setTimeout(() => { try { report({ - tp: 'err', + tp: context.tp || 'err', msg: err.message, sc: 'cdn.yoho.cn', ln: 0, diff --git a/apps/pages/home/channel/channel.vue b/apps/pages/home/channel/channel.vue index 5ab754a..5ecb14d 100644 --- a/apps/pages/home/channel/channel.vue +++ b/apps/pages/home/channel/channel.vue @@ -107,6 +107,7 @@ export default { height: 0, isA: false, isHidden: true, + reported: false, }; }, computed: { @@ -151,26 +152,41 @@ export default { // this.getAllInboxCatInfo(); this.PAGE_URL = window.location.href; + + if (!this.reported) { + // 首页进入上报 + this.$store.dispatch('reportYas', { + params: { + param: { }, + appop: 'XY_UFO_MAIN_START' + } + }); + } }, async serverPrefetch() { return this.fetchChannelList(); }, mounted() { - // 首页进入上报 - this.$store.dispatch('reportYas', { - params: { - param: { }, - appop: 'XY_UFO_MAIN_START' - } - }); // 初始化 选中类目 const [firstNav] = this.navList; + if(firstNav) { const {url = ''} = firstNav; + this.selectedCategory = queryString.parse(url); } this.refreshProductList(this.active); + + // 首页进入上报 + this.$store.dispatch('reportYas', { + params: { + param: { }, + appop: 'XY_UFO_MAIN_START' + } + }); + + this.reported = true; }, methods: { ...mapActions(['fetchChannelList', 'getAllInboxCatInfo']), diff --git a/apps/store/yoho/index.js b/apps/store/yoho/index.js index 18931b2..765f4f8 100644 --- a/apps/store/yoho/index.js +++ b/apps/store/yoho/index.js @@ -212,7 +212,7 @@ export default function(mergeState = {}) { // 获取设备信息 if (!retry && !get(window, 'appBaseLogs.device.dm') && this.$xianyu.getClientInfo) { this.$xianyu.getClientInfo(info => { - info = info || {} + info = info || {}; set(window, 'appBaseLogs.device.dm', info.platformName ? info.platformName : `${info.brand} ${info.model}`); this.dispatch('reportYas', { @@ -233,7 +233,7 @@ export default function(mergeState = {}) { return; } - if (window._yas && window._yas.sendAppLogs) { + if (window) { param = param || {}; if (!param.C_ID) { @@ -251,29 +251,53 @@ export default function(mergeState = {}) { param.SRC_ID = srcId; } - window._yas.sendAppLogs( - { - appop, - param: param ? JSON.stringify(param) : '{}', - }, - asyncindx, - ); + if (window._yas && window._yas.sendAppLogs) { + window._yas.sendAppLogs( + { + appop, + param: param ? JSON.stringify(param) : '{}', + }, + asyncindx, + ); - if (window._yasEvents) { - window._yasEvents.forEach(e => { - window._yas.sendAppLogs( - { - appop: e.appop, - param: e.param ? JSON.stringify(e.param) : '{}', - }, - asyncindx, - ); - }); + if (window._yasEvents) { + window._yasEvents.forEach(e => { + window._yas.sendAppLogs( + { + appop: e.appop, + param: e.param ? JSON.stringify(e.param) : '{}', + }, + asyncindx, + ); + }); + + window._yasEvents = null; + } + } else if (window._yas2) { + window._yas2.sendAppLogs( + { + appop, + param: param ? JSON.stringify(param) : '{}', + }, + asyncindx, + ); + + if (window._yasEvents) { + window._yasEvents.forEach(e => { + window._yas2.sendAppLogs( + { + appop: e.appop, + param: e.param ? JSON.stringify(e.param) : '{}', + }, + asyncindx, + ); + }); - window._yasEvents = null; + window._yasEvents = null; + } + } else { + window._yasEvents = window._yasEvents ? window._yasEvents.push({ appop, param }) : [{ appop, param }]; } - } else { - window._yasEvents = window._yasEvents ? window._yasEvents.push({ appop, param }) : [{ appop, param }]; } }, 300); } catch (e) { diff --git a/apps/utils/init-client.js b/apps/utils/init-client.js index 0cbb9c1..b666c1d 100644 --- a/apps/utils/init-client.js +++ b/apps/utils/init-client.js @@ -1,6 +1,8 @@ import Vue from 'vue'; import cookie from 'yoho-cookie'; import xianyu from '../common/xianyu'; +import './yas/ya'; +import reportError from 'report-error'; const setWindowSize = (store) => { const { clientWidth, clientHeight } = document.body; @@ -50,6 +52,7 @@ window.indx = 1; function initBaseLogs() { if (!(window._yas && window._yas.sendAppLogs)) { + reportError({ tp: 'yas_err' }); (function(w, d, s, j, f) { var a = d.createElement(s); var m = d.getElementsByTagName(s)[0]; diff --git a/apps/utils/yas/config.js b/apps/utils/yas/config.js new file mode 100644 index 0000000..e6c1e97 --- /dev/null +++ b/apps/utils/yas/config.js @@ -0,0 +1,17 @@ +function getDomain() { + var domainArr = document.domain.split('.'); + var length = domainArr.length; + if (length > 1 && isNaN(domainArr[length - 1])) { + return '.' + domainArr[length - 2] + '.' + domainArr[length - 1]; + } else { + return document.domain; + } +} + +module.exports = { + version: '1.0', + yasPath: '/web/', + yasDomain: getDomain(), + yasImgDomain: '//analytics.m.yohobuy.com/yas.gif', + yasMobileDomain: '//analytics.m.yohobuy.com/yas_mobile' +}; diff --git a/apps/utils/yas/cross.js b/apps/utils/yas/cross.js new file mode 100644 index 0000000..4862f52 --- /dev/null +++ b/apps/utils/yas/cross.js @@ -0,0 +1,50 @@ +/** + * 跨域发送信息工具库 + */ +var config = require('./config'); + +var yasMobileDomain = config.yasMobileDomain; + +var createCORSRequest = function(method, url) { + var xhr; + if (window.XMLHttpRequest) { + xhr = new XMLHttpRequest(); + } else if (typeof XDomainRequest != 'undefined') { + // IE8 & IE9 + xhr = new XDomainRequest(); + } else if (window.ActiveXObject) { + xhr = new ActiveXObject('Microsoft.XMLHTTP'); + } + return xhr; +}; + +// app中打开wap页 数据上报 +exports.appSend = function(data, callback) { + if (!window.appBaseLogs) { + return; + } + + var xhr = createCORSRequest(); + if (!xhr) { + return; + } + + xhr.ontimeout = function(e) { + console.log('timeout: ', JSON.stringify(e)); + }; + xhr.onerror = function(e) { + console.log('error: ', JSON.stringify(e)); + }; + xhr.onreadystatechange = function() { + if (xhr.readyState == 4) { + if (xhr.status == 200 && callback) { + callback(); + } + } + }; + + xhr.open('post', (document.location.protocol === 'https:' ? 'https:' : 'http:') + yasMobileDomain, true); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + xhr.send(data); +}; + diff --git a/apps/utils/yas/util.js b/apps/utils/yas/util.js new file mode 100644 index 0000000..c555909 --- /dev/null +++ b/apps/utils/yas/util.js @@ -0,0 +1,17 @@ +/** + * 采集系统的工具库 + */ + +//浅层合并对象 +exports.merge = function(obj1, obj2) { + var ret = {}; + for (var attr in obj1) { + ret[attr] = obj1[attr]; + } + + for (var attr2 in obj2) { + ret[attr2] = obj2[attr2]; + } + return ret; +}; + diff --git a/apps/utils/yas/ya.js b/apps/utils/yas/ya.js new file mode 100644 index 0000000..8afc0dd --- /dev/null +++ b/apps/utils/yas/ya.js @@ -0,0 +1,52 @@ +/** + * @fileoverview YAS (YOHO! Acquisition System) YOHO!采集系统的前端js的开发包, + * 用于在网页端采集信息(应用信息,用户信息,用户行为信息,浏览器及其系统信息)。 + */ +//工具库 +var util = require('./util'); + +//跨域通信 +var cross = require('./cross'); + +var _yas = {}; + +/** + * 发送用户订制信息, 此方法提供给用户调用, 本方法不对参数合法性进行检查, 调用者自己保证。(app上报数据使用) + * @param json 用户订制信息, 必选参数,采用json格式 + * @param asyncindx 是否需要同步indx + * true表示同步,false表示不需要同步, 默认值是false + * 本方法使用场合: + * 1. app中的事件上报 + */ +_yas.sendAppLogs = function(json) { + if (!window.appBaseLogs) { + return; + } + + // 数据整合 + var param = JSON.parse(json.param); + if (param.F_URL) { + param.F_URL = decodeURIComponent(param.F_URL); + } + + // abtype + var ev = window.appBaseLogs.events[0]; + if (ev.abtype) { + param.AB_TYPE = ev.abtype; + } + var event = util.merge(ev, { + ts: (new Date()).getTime().toString(), + indx: ++window.indx, + op: json.appop, + param: param + }); + var logs = util.merge(window.appBaseLogs, { + events: [event] + }); + + // 上报数据 + cross.appSend('_mlogs=' + encodeURIComponent(JSON.stringify(logs))); + window._yasloaded = true; +}; + +window._yas2 = _yas; -- libgit2 0.24.0