costway-tracking-v2 2.0.10 → 2.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.cjs +44 -45
- package/package.json +1 -1
- package/tracking.js +42 -38
- package/trackvue3.js +31 -28
package/index.cjs
CHANGED
|
@@ -394,9 +394,9 @@ function trackResourceLoadTimes() {
|
|
|
394
394
|
function setupRouterListener(router) {
|
|
395
395
|
router.beforeEach((to, from, next) => {
|
|
396
396
|
if (from.name) {
|
|
397
|
-
console.log("路由对象 离开页面了 ===start")
|
|
397
|
+
// console.log("路由对象 离开页面了 ===start")
|
|
398
398
|
trackPageLeave("setupRouterListener");
|
|
399
|
-
console.log("路由对象 离开页面了 ====end")
|
|
399
|
+
// console.log("路由对象 离开页面了 ====end")
|
|
400
400
|
}
|
|
401
401
|
hasTrackedPageLeave = ""; // 重置标志
|
|
402
402
|
next();
|
|
@@ -414,63 +414,62 @@ function setupRouterListener(router) {
|
|
|
414
414
|
let lastVisibilityState = isBrowser() ? document.visibilityState : "";
|
|
415
415
|
let pageHiddenTime = null;
|
|
416
416
|
let pageVisibleTime = null;
|
|
417
|
+
const app = typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().includes("costway-app");
|
|
417
418
|
module.exports = {
|
|
418
419
|
initTracking: function (router) {
|
|
419
420
|
// 如果 UA 里包含 costway-app
|
|
420
|
-
const app = typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().includes("costway-app");
|
|
421
421
|
|
|
422
422
|
let userId = getuserId();
|
|
423
423
|
if (!userId) {
|
|
424
424
|
userId = generateUUID();
|
|
425
425
|
setuserId(userId);
|
|
426
|
-
}
|
|
427
|
-
trackPageView();
|
|
428
|
-
// !app && trackPageView();
|
|
426
|
+
}
|
|
427
|
+
!app && trackPageView();
|
|
429
428
|
//trackPageLoadTime();
|
|
430
429
|
// trackResourceLoadTimes();
|
|
431
430
|
document.addEventListener('click', trackClick);
|
|
432
431
|
|
|
433
432
|
if(!app){
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
433
|
+
document.addEventListener('visibilitychange', function () {
|
|
434
|
+
if (lastVisibilityState) {
|
|
435
|
+
if (document.visibilityState === 'hidden' || document.hidden) {
|
|
436
|
+
// console.log('hidden');
|
|
437
|
+
// 页面从可见变为不可见,记录时间
|
|
438
|
+
pageHiddenTime = new Date().getTime();
|
|
439
|
+
const visibleDuration = new Date().getTime() - pageVisibleTime;
|
|
440
|
+
if (hasTrackedPageLeave == "" || hasTrackedPageLeave == "hidden") {
|
|
441
|
+
hasTrackedPageLeave = "hidden";
|
|
442
|
+
trackPageLeave('hidden');
|
|
443
|
+
}
|
|
444
|
+
} else if (document.visibilityState === 'visible' && pageHiddenTime) {
|
|
445
|
+
// 页面从不可见变为可见,计算隐藏的时长
|
|
446
|
+
const hiddenDuration = new Date().getTime() - pageHiddenTime;
|
|
447
|
+
pageHiddenTime = null;
|
|
448
|
+
pageVisibleTime = new Date().getTime();
|
|
449
|
+
// 如果页面隐藏的时长超过一定阈值(例如30秒),则认为用户已离开页面
|
|
450
|
+
if (hiddenDuration > 30000) {
|
|
451
|
+
trackPageLeave("visible");
|
|
452
|
+
}
|
|
453
|
+
// 触发 pageView 事件
|
|
454
|
+
trackPageView();
|
|
445
455
|
}
|
|
446
|
-
} else if (document.visibilityState === 'visible' && pageHiddenTime) {
|
|
447
|
-
// 页面从不可见变为可见,计算隐藏的时长
|
|
448
|
-
const hiddenDuration = new Date().getTime() - pageHiddenTime;
|
|
449
|
-
pageHiddenTime = null;
|
|
450
|
-
pageVisibleTime = new Date().getTime();
|
|
451
|
-
// 如果页面隐藏的时长超过一定阈值(例如30秒),则认为用户已离开页面
|
|
452
|
-
if (hiddenDuration > 30000) {
|
|
453
|
-
trackPageLeave("visible");
|
|
454
|
-
}
|
|
455
|
-
// 触发 pageView 事件
|
|
456
|
-
trackPageView();
|
|
457
456
|
}
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
457
|
+
lastVisibilityState = document.visibilityState;
|
|
458
|
+
});
|
|
459
|
+
window.addEventListener('pagehide', function () {
|
|
460
|
+
// console.log('pagehide');
|
|
461
|
+
if (hasTrackedPageLeave == "pagehide") {
|
|
462
|
+
hasTrackedPageLeave = "pagehide";
|
|
463
|
+
trackPageLeave('pagehide');
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
});
|
|
467
|
+
window.addEventListener('DOMContentLoaded', function () {
|
|
468
|
+
observeDomChanges();
|
|
469
|
+
observeClassChanges();
|
|
470
|
+
});
|
|
471
|
+
window.addEventListener('load', function () { setTimeout(trackPageLoadTime, 0); });
|
|
472
|
+
}
|
|
474
473
|
|
|
475
474
|
registerErrorListener();
|
|
476
475
|
|
|
@@ -479,7 +478,7 @@ module.exports = {
|
|
|
479
478
|
}
|
|
480
479
|
},
|
|
481
480
|
trackCustomEvent: function (eventName, eventData) {
|
|
482
|
-
console.log(eventName)
|
|
481
|
+
// console.log(eventName)
|
|
483
482
|
const data = {
|
|
484
483
|
userId: getuserId(),
|
|
485
484
|
timestamp: new Date().getTime(),
|
package/package.json
CHANGED
package/tracking.js
CHANGED
|
@@ -414,56 +414,60 @@
|
|
|
414
414
|
let lastVisibilityState = document.visibilityState;
|
|
415
415
|
let pageHiddenTime = null;
|
|
416
416
|
let pageVisibleTime = null;
|
|
417
|
+
const app = typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().includes("costway-app");
|
|
417
418
|
function init() {
|
|
418
419
|
let userId = getuserId();
|
|
419
420
|
if (!userId) {
|
|
420
421
|
userId = generateUUID();
|
|
421
422
|
setuserId(userId);
|
|
422
423
|
}
|
|
423
|
-
trackPageView();
|
|
424
|
+
!app && trackPageView();
|
|
424
425
|
// trackPageLoadTime();
|
|
425
426
|
// trackResourceLoadTimes();
|
|
426
427
|
document.addEventListener('click', trackClick);
|
|
427
428
|
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
if (
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
hasTrackedPageLeave
|
|
437
|
-
|
|
429
|
+
if(!app){
|
|
430
|
+
document.addEventListener('visibilitychange', function () {
|
|
431
|
+
if (lastVisibilityState) {
|
|
432
|
+
if (document.visibilityState === 'hidden' || document.hidden) {
|
|
433
|
+
// console.log('hidden');
|
|
434
|
+
// 页面从可见变为不可见,记录时间
|
|
435
|
+
pageHiddenTime = new Date().getTime();
|
|
436
|
+
const visibleDuration = new Date().getTime() - pageVisibleTime;
|
|
437
|
+
if(hasTrackedPageLeave=="" || hasTrackedPageLeave=="hidden"){
|
|
438
|
+
hasTrackedPageLeave = "hidden";
|
|
439
|
+
trackPageLeave('hidden');
|
|
440
|
+
}
|
|
441
|
+
} else if (document.visibilityState === 'visible' && pageHiddenTime) {
|
|
442
|
+
// 页面从不可见变为可见,计算隐藏的时长
|
|
443
|
+
const hiddenDuration = new Date().getTime() - pageHiddenTime;
|
|
444
|
+
pageHiddenTime = null;
|
|
445
|
+
pageVisibleTime = new Date().getTime();
|
|
446
|
+
// 如果页面隐藏的时长超过一定阈值(例如30秒),则认为用户已离开页面
|
|
447
|
+
if (hiddenDuration > 30000) {
|
|
448
|
+
trackPageLeave("visible");
|
|
449
|
+
}
|
|
450
|
+
// 触发 pageView 事件
|
|
451
|
+
trackPageView();
|
|
438
452
|
}
|
|
439
|
-
} else if (document.visibilityState === 'visible' && pageHiddenTime) {
|
|
440
|
-
// 页面从不可见变为可见,计算隐藏的时长
|
|
441
|
-
const hiddenDuration = new Date().getTime() - pageHiddenTime;
|
|
442
|
-
pageHiddenTime = null;
|
|
443
|
-
pageVisibleTime = new Date().getTime();
|
|
444
|
-
// 如果页面隐藏的时长超过一定阈值(例如30秒),则认为用户已离开页面
|
|
445
|
-
if (hiddenDuration > 30000) {
|
|
446
|
-
trackPageLeave("visible");
|
|
447
|
-
}
|
|
448
|
-
// 触发 pageView 事件
|
|
449
|
-
trackPageView();
|
|
450
453
|
}
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
}
|
|
454
|
+
lastVisibilityState = document.visibilityState;
|
|
455
|
+
});
|
|
456
|
+
window.addEventListener('pagehide', function () {
|
|
457
|
+
// console.log('pagehide');
|
|
458
|
+
if (hasTrackedPageLeave == "pagehide") {
|
|
459
|
+
hasTrackedPageLeave = "pagehide";
|
|
460
|
+
trackPageLeave('pagehide');
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
});
|
|
464
|
+
window.addEventListener('load', function () { setTimeout(trackPageLoadTime, 0);});
|
|
465
|
+
window.addEventListener('DOMContentLoaded', function () {
|
|
466
|
+
observeDomChanges();
|
|
467
|
+
observeClassChanges();
|
|
468
|
+
});
|
|
469
|
+
}
|
|
470
|
+
|
|
467
471
|
registerErrorListener();
|
|
468
472
|
}
|
|
469
473
|
|
package/trackvue3.js
CHANGED
|
@@ -425,7 +425,7 @@ function setupRouterListener(router) {
|
|
|
425
425
|
hasTrackedPageLeave = false;
|
|
426
426
|
const fromFullURL = `${window.location.protocol}//${window.location.hostname}${from.fullPath}`;
|
|
427
427
|
const toFullURL = `${window.location.protocol}//${window.location.hostname}${to.fullPath}`;
|
|
428
|
-
console.log('从', fromFullURL, '跳转到', toFullURL);
|
|
428
|
+
// console.log('从', fromFullURL, '跳转到', toFullURL);
|
|
429
429
|
lastRoute = currentRoute;
|
|
430
430
|
currentRoute = toFullURL;
|
|
431
431
|
simulatedReferrer = fromFullURL; // 更新模拟的referrer为当前页面的完整URL
|
|
@@ -446,6 +446,7 @@ let lastVisibilityState = isBrowser() ? document.visibilityState : null;
|
|
|
446
446
|
let pageHiddenTime = null;
|
|
447
447
|
let pageVisibleTime = null;
|
|
448
448
|
let initURL = isBrowser() ? window.location.href : '';
|
|
449
|
+
const app = typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().includes("costway-app");
|
|
449
450
|
function initTracking(router) {
|
|
450
451
|
if (!isBrowser()) {
|
|
451
452
|
return; // 如果不在浏览器环境中,则直接返回
|
|
@@ -458,40 +459,42 @@ function initTracking(router) {
|
|
|
458
459
|
}
|
|
459
460
|
simulatedReferrer = isBrowser() ? (document.referrer || window.location.href) : '';
|
|
460
461
|
|
|
461
|
-
trackPageView(initURL);
|
|
462
|
+
!app && trackPageView(initURL);
|
|
462
463
|
// trackPageLoadTime();
|
|
463
464
|
//trackResourceLoadTimes();
|
|
464
465
|
if (isBrowser()) {
|
|
465
466
|
document.addEventListener('click', trackClick);
|
|
466
467
|
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
} else if (document.visibilityState === 'visible' && pageHiddenTime) {
|
|
475
|
-
// 页面从不可见变为可见,计算隐藏的时长
|
|
476
|
-
const hiddenDuration = new Date().getTime() - pageHiddenTime;
|
|
477
|
-
pageHiddenTime = null;
|
|
478
|
-
pageVisibleTime = new Date().getTime();
|
|
479
|
-
// 如果页面隐藏的时长超过一定阈值(例如30秒),则认为用户已离开页面
|
|
480
|
-
if (hiddenDuration > 30000) {
|
|
468
|
+
if(!app){
|
|
469
|
+
document.addEventListener('visibilitychange', function () {
|
|
470
|
+
if (document.visibilityState === 'hidden') {
|
|
471
|
+
// 页面从可见变为不可见,记录时间
|
|
472
|
+
pageHiddenTime = new Date().getTime();
|
|
473
|
+
const visibleDuration = new Date().getTime() - pageVisibleTime;
|
|
481
474
|
trackPageLeave();
|
|
475
|
+
|
|
476
|
+
} else if (document.visibilityState === 'visible' && pageHiddenTime) {
|
|
477
|
+
// 页面从不可见变为可见,计算隐藏的时长
|
|
478
|
+
const hiddenDuration = new Date().getTime() - pageHiddenTime;
|
|
479
|
+
pageHiddenTime = null;
|
|
480
|
+
pageVisibleTime = new Date().getTime();
|
|
481
|
+
// 如果页面隐藏的时长超过一定阈值(例如30秒),则认为用户已离开页面
|
|
482
|
+
if (hiddenDuration > 30000) {
|
|
483
|
+
trackPageLeave();
|
|
484
|
+
}
|
|
485
|
+
// 触发 pageView 事件
|
|
486
|
+
trackPageView();
|
|
482
487
|
}
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
observeClassChanges();
|
|
494
|
-
});
|
|
488
|
+
});
|
|
489
|
+
|
|
490
|
+
//window.addEventListener('beforeunload', trackPageLeave);
|
|
491
|
+
window.addEventListener('load', function () { setTimeout(trackPageLoadTime, 0); });
|
|
492
|
+
window.addEventListener('pagehide', trackPageLeave);
|
|
493
|
+
window.addEventListener('DOMContentLoaded', function () {
|
|
494
|
+
observeDomChanges();
|
|
495
|
+
observeClassChanges();
|
|
496
|
+
});
|
|
497
|
+
}
|
|
495
498
|
registerErrorListener();
|
|
496
499
|
console.log('Configured country:', config.country);
|
|
497
500
|
if (router) { // 如果提供了路由对象,则设置路由监听器
|