improved script
This commit is contained in:
parent
484426499b
commit
1c337a34c9
80
script/trackscript.html
Normal file
80
script/trackscript.html
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
<!-- TRACKING SCRIPT -->
|
||||||
|
<!-- Global server config -->
|
||||||
|
<script>
|
||||||
|
const server = window.location.origin;
|
||||||
|
|
||||||
|
// const server = "https://tracking.server.com"
|
||||||
|
// This will work, but is NOT recommended as it is with third party request.
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<!-- Tracking function -->
|
||||||
|
<script>
|
||||||
|
// Initialize tracking function
|
||||||
|
function tE(eventName, additionalParams = {}) {
|
||||||
|
// Create tracking data object
|
||||||
|
const data = {
|
||||||
|
event: eventName,
|
||||||
|
url: window.location.href,
|
||||||
|
ref: document.referrer,
|
||||||
|
ua: navigator.userAgent,
|
||||||
|
sw: window.screen.width,
|
||||||
|
lang: navigator.language || navigator.userLanguage,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Helper function to serialize an object into URL parameters
|
||||||
|
function serializeObject(obj, prefix) {
|
||||||
|
const str = [];
|
||||||
|
for (const p in obj) {
|
||||||
|
if (obj.hasOwnProperty(p)) {
|
||||||
|
const k = prefix ? prefix + "[" + p + "]" : p;
|
||||||
|
const v = obj[p];
|
||||||
|
if (v !== null && typeof v === "object") {
|
||||||
|
str.push(serializeObject(v, k));
|
||||||
|
} else {
|
||||||
|
str.push(encodeURIComponent(k) + "=" + encodeURIComponent(v));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return str.join("&");
|
||||||
|
}
|
||||||
|
|
||||||
|
function sendT() {
|
||||||
|
try {
|
||||||
|
const trackingUrl = `${server}/spur?${serializeObject(data)}`;
|
||||||
|
fetch(trackingUrl, {
|
||||||
|
method: "POST",
|
||||||
|
mode: "no-cors",
|
||||||
|
cache: "no-cache",
|
||||||
|
credentials: "omit", // Don't send cookies
|
||||||
|
keepalive: true, // Ensures request completes even if page unloads
|
||||||
|
});
|
||||||
|
|
||||||
|
return true;
|
||||||
|
} catch (e) {
|
||||||
|
// Last resort fallback to image method
|
||||||
|
const pixel = new Image();
|
||||||
|
pixel.src = `${server}/pic?${serializeObject(data)}`;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return sendT();
|
||||||
|
}
|
||||||
|
// Simple Wrapper for pageLoad.
|
||||||
|
function pL() {
|
||||||
|
tE("pageLoad_" + window.location.pathname);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<!-- Set up page load tracking -->
|
||||||
|
<script>
|
||||||
|
document.addEventListener("DOMContentLoaded", function () {
|
||||||
|
try {
|
||||||
|
pL();
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error in DOMContentLoaded:", error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
@ -120,12 +120,17 @@ function tE(eventName, additionalParams = {}) {
|
|||||||
|
|
||||||
return sendInfo();
|
return sendInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function pL() {
|
||||||
|
tE("pageLoad_" + window.location.pathname);
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
<!-- Set up page load tracking -->
|
<!-- Set up page load tracking -->
|
||||||
<script>
|
<script>
|
||||||
document.addEventListener("DOMContentLoaded", function() {
|
document.addEventListener("DOMContentLoaded", function() {
|
||||||
try {
|
try {
|
||||||
tE("pageload");
|
pL();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Error in page load tracking:", error);
|
console.error("Error in page load tracking:", error);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user