diff --git a/dist/latest/latest.dev.js b/dist/latest/latest.dev.js index 06bf05c..ce72376 100644 --- a/dist/latest/latest.dev.js +++ b/dist/latest/latest.dev.js @@ -1,4 +1,4 @@ -/* Simple Analytics - Privacy-first analytics (docs.simpleanalytics.com/script; 2025-05-29; 36a5; v12) */ +/* Simple Analytics - Privacy-first analytics (docs.simpleanalytics.com/script; 2025-05-30; 1686; v12) */ /* eslint-env browser */ (function ( @@ -191,8 +191,8 @@ attr(scriptElement, namespaceText) || defaultNamespace; - var metadataObject = window[namespace + "_metadata"]; var appendMetadata = function (metadata, data) { + var metadataObject = window[namespace + "_metadata"]; if (isObject(metadataObject)) metadata = assign(metadata, metadataObject); var metadataCollectorFunction = window[metadataCollector]; if (!isFunction(metadataCollectorFunction)) return metadata; diff --git a/src/default.js b/src/default.js index 816815a..c931214 100644 --- a/src/default.js +++ b/src/default.js @@ -206,8 +206,8 @@ defaultNamespace; /** if metadata **/ - var metadataObject = window[namespace + "_metadata"]; var appendMetadata = function (metadata, data) { + var metadataObject = window[namespace + "_metadata"]; if (isObject(metadataObject)) metadata = assign(metadata, metadataObject); var metadataCollectorFunction = window[metadataCollector]; if (!isFunction(metadataCollectorFunction)) return metadata; diff --git a/test/unit/metadata.test.js b/test/unit/metadata.test.js index 76981c8..b5270b6 100644 --- a/test/unit/metadata.test.js +++ b/test/unit/metadata.test.js @@ -39,4 +39,47 @@ describe("metadata", function () { done(); }, 10); }); + + it("reloads global metadata on each call", function (done) { + const dom = createDOM({ settings: { autoCollect: false } }); + const { runInContext } = require("vm"); + + runInContext( + "window.sa_metadata = { first: true };", + dom.getInternalVMContext() + ); + + dom.window.sa_pageview("/first"); + + setTimeout(() => { + let req = dom.sent.find( + (r) => r.type === "image" && /path=%2Ffirst/.test(r.url) + ); + expect(req, "first pageview request").to.exist; + let url = new URL(req.url); + let meta = JSON.parse( + decodeURIComponent(url.searchParams.get("metadata")) + ); + expect(meta).to.include({ first: true }); + + runInContext( + "window.sa_metadata = { second: true };", + dom.getInternalVMContext() + ); + + dom.window.sa_pageview("/second"); + + setTimeout(() => { + req = dom.sent.find( + (r) => r.type === "image" && /path=%2Fsecond/.test(r.url) + ); + expect(req, "second pageview request").to.exist; + url = new URL(req.url); + meta = JSON.parse(decodeURIComponent(url.searchParams.get("metadata"))); + expect(meta).to.include({ second: true }); + expect(meta).to.not.have.property("first"); + done(); + }, 10); + }, 10); + }); });