From 2cdf553015f0b68aec24fc7406888c0344e03864 Mon Sep 17 00:00:00 2001 From: Chris Gee Date: Thu, 24 Oct 2024 14:46:43 -0700 Subject: [PATCH 1/9] change to pagehide --- spec/mocha.helpers.js | 2 +- src/utils/request-queue.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/mocha.helpers.js b/spec/mocha.helpers.js index e3ee9060..90628f5a 100644 --- a/spec/mocha.helpers.js +++ b/spec/mocha.helpers.js @@ -21,7 +21,7 @@ const triggerResize = () => { const triggerUnload = () => { const unloadEvent = document.createEvent('Event'); - unloadEvent.initEvent('beforeunload', true, true); + unloadEvent.initEvent('pagehide', true, true); global.window.unload = () => { global.window.dispatchEvent(unloadEvent); diff --git a/src/utils/request-queue.js b/src/utils/request-queue.js index 02146c9a..cb85b4c1 100644 --- a/src/utils/request-queue.js +++ b/src/utils/request-queue.js @@ -20,7 +20,7 @@ class RequestQueue { : false; // Defaults to 'false' // Mark if page environment is unloading - helpers.addEventListener('beforeunload', () => { + helpers.addEventListener('pagehide', () => { this.pageUnloading = true; }); From fc0c47d48ca4d83060c154fe1f843b0a653a7719 Mon Sep 17 00:00:00 2001 From: Chris Gee Date: Thu, 24 Oct 2024 15:26:36 -0700 Subject: [PATCH 2/9] change to visibilitychange --- spec/mocha.helpers.js | 2 +- src/utils/request-queue.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/mocha.helpers.js b/spec/mocha.helpers.js index 90628f5a..165e5131 100644 --- a/spec/mocha.helpers.js +++ b/spec/mocha.helpers.js @@ -21,7 +21,7 @@ const triggerResize = () => { const triggerUnload = () => { const unloadEvent = document.createEvent('Event'); - unloadEvent.initEvent('pagehide', true, true); + unloadEvent.initEvent('visibilitychange', true, true); global.window.unload = () => { global.window.dispatchEvent(unloadEvent); diff --git a/src/utils/request-queue.js b/src/utils/request-queue.js index cb85b4c1..4ad7d6c4 100644 --- a/src/utils/request-queue.js +++ b/src/utils/request-queue.js @@ -20,7 +20,7 @@ class RequestQueue { : false; // Defaults to 'false' // Mark if page environment is unloading - helpers.addEventListener('pagehide', () => { + helpers.addEventListener('visibilitychange', () => { this.pageUnloading = true; }); From 14bed182d0dc441eb1a8ea425d3422b495184668 Mon Sep 17 00:00:00 2001 From: Chris Gee Date: Thu, 24 Oct 2024 15:27:32 -0700 Subject: [PATCH 3/9] update comment --- src/utils/request-queue.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/request-queue.js b/src/utils/request-queue.js index 4ad7d6c4..f0ea8860 100644 --- a/src/utils/request-queue.js +++ b/src/utils/request-queue.js @@ -182,7 +182,7 @@ class RequestQueue { if (this.options && this.options.trackingSendDelay === 0) { this.sendEvents(); } else { - // Defer sending of events to give beforeunload time to register (avoids race condition) + // Defer sending of events to give visibilitychange time to register (avoids race condition) setTimeout(this.sendEvents.bind(this), (this.options && this.options.trackingSendDelay) || 250); } } From cc40ecfdc303548e5b29d13acf912f91a619d6bd Mon Sep 17 00:00:00 2001 From: Chris Gee Date: Fri, 27 Dec 2024 08:24:39 -0800 Subject: [PATCH 4/9] Address comments --- src/utils/request-queue.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/utils/request-queue.js b/src/utils/request-queue.js index f0ea8860..7158d2e0 100644 --- a/src/utils/request-queue.js +++ b/src/utils/request-queue.js @@ -21,7 +21,9 @@ class RequestQueue { // Mark if page environment is unloading helpers.addEventListener('visibilitychange', () => { - this.pageUnloading = true; + if (document.visibilityState === 'hidden') { + this.pageUnloading = true; + } }); if (this.sendTrackingEvents) { From 80d2b3ea1e2d3630a3b3be6f555233102748b79b Mon Sep 17 00:00:00 2001 From: Chris Gee Date: Wed, 2 Apr 2025 10:52:55 -0700 Subject: [PATCH 5/9] Add check when changed to visible --- src/utils/request-queue.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/utils/request-queue.js b/src/utils/request-queue.js index 7158d2e0..2e149017 100644 --- a/src/utils/request-queue.js +++ b/src/utils/request-queue.js @@ -19,11 +19,20 @@ class RequestQueue { ? true : false; // Defaults to 'false' - // Mark if page environment is unloading - helpers.addEventListener('visibilitychange', () => { + helpers.addEventListener('visibilitychange', () => { + // Mark if page environment is unloading if (document.visibilityState === 'hidden') { this.pageUnloading = true; } + + // Send events once page is visible + if (this.pageUnloading = true && document.visibilityState === 'visible') { + this.pageUnloading = false; + + if (this.sendTrackingEvents) { + this.send(); + } + } }); if (this.sendTrackingEvents) { From f93ed85080327efae3b89a8d0de4adb873fc6e3a Mon Sep 17 00:00:00 2001 From: Chris Gee Date: Wed, 2 Apr 2025 10:55:24 -0700 Subject: [PATCH 6/9] lint --- src/utils/request-queue.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/utils/request-queue.js b/src/utils/request-queue.js index 2e149017..be2e165f 100644 --- a/src/utils/request-queue.js +++ b/src/utils/request-queue.js @@ -19,14 +19,14 @@ class RequestQueue { ? true : false; // Defaults to 'false' - helpers.addEventListener('visibilitychange', () => { + helpers.addEventListener('visibilitychange', () => { // Mark if page environment is unloading if (document.visibilityState === 'hidden') { this.pageUnloading = true; } // Send events once page is visible - if (this.pageUnloading = true && document.visibilityState === 'visible') { + if (document.visibilityState === 'visible' && this.pageUnloading === true) { this.pageUnloading = false; if (this.sendTrackingEvents) { From ed78445cd6c2980d09bf0192a40cc226dfd4c812 Mon Sep 17 00:00:00 2001 From: Chris Gee Date: Wed, 2 Apr 2025 14:22:35 -0700 Subject: [PATCH 7/9] Add visibilityState to tests --- spec/mocha.helpers.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spec/mocha.helpers.js b/spec/mocha.helpers.js index 165e5131..c8f80a8e 100644 --- a/spec/mocha.helpers.js +++ b/spec/mocha.helpers.js @@ -1,5 +1,6 @@ /* eslint-disable import/no-unresolved, import/extensions */ const qs = require('qs'); +const sinon = require("sinon"); const store = require('../test/utils/store'); // Trigger browser resize event @@ -22,6 +23,7 @@ const triggerUnload = () => { const unloadEvent = document.createEvent('Event'); unloadEvent.initEvent('visibilitychange', true, true); + sinon.stub(document, 'visibilityState').value('hidden'); global.window.unload = () => { global.window.dispatchEvent(unloadEvent); From 1db67e3b4c76c3ea8bf2af7df3b7cd5c88c7ee6e Mon Sep 17 00:00:00 2001 From: Chris Gee Date: Wed, 2 Apr 2025 14:47:52 -0700 Subject: [PATCH 8/9] lint --- spec/mocha.helpers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/mocha.helpers.js b/spec/mocha.helpers.js index c8f80a8e..fb7ac900 100644 --- a/spec/mocha.helpers.js +++ b/spec/mocha.helpers.js @@ -1,6 +1,6 @@ /* eslint-disable import/no-unresolved, import/extensions */ const qs = require('qs'); -const sinon = require("sinon"); +const sinon = require('sinon'); const store = require('../test/utils/store'); // Trigger browser resize event From 98973ffd90d0f0ca837c060b49d96b10f9871d9e Mon Sep 17 00:00:00 2001 From: Chris Gee Date: Wed, 2 Apr 2025 14:55:44 -0700 Subject: [PATCH 9/9] combine if statements --- src/utils/request-queue.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/utils/request-queue.js b/src/utils/request-queue.js index be2e165f..50d9882c 100644 --- a/src/utils/request-queue.js +++ b/src/utils/request-queue.js @@ -23,10 +23,8 @@ class RequestQueue { // Mark if page environment is unloading if (document.visibilityState === 'hidden') { this.pageUnloading = true; - } - - // Send events once page is visible - if (document.visibilityState === 'visible' && this.pageUnloading === true) { + } else if (document.visibilityState === 'visible' && this.pageUnloading === true) { + // Send events once page is visible again this.pageUnloading = false; if (this.sendTrackingEvents) {