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();
|
||||
}
|
||||
|
||||
function pL() {
|
||||
tE("pageLoad_" + window.location.pathname);
|
||||
}
|
||||
|
||||
</script>
|
||||
<!-- Set up page load tracking -->
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", function() {
|
||||
try {
|
||||
tE("pageload");
|
||||
pL();
|
||||
} catch (error) {
|
||||
console.error("Error in page load tracking:", error);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user