Use navigator.sendBeacon when possible - #136, #206

Andrew Kane committed Aug 19, 2016
commit c6fa0fad312edf8d3452c635a72918b4a08fe06d
Showing 1 changed file with 18 additions and 6 deletions
vendor/assets/javascripts/ahoy.js +18 -6
@@ @@ -22,6 +22,7 @@
var eventQueue = [];
var visitsUrl = ahoy.visitsUrl || "/ahoy/visits"
var eventsUrl = ahoy.eventsUrl || "/ahoy/events"
+ var canTrackNow = canStringify && typeof(navigator.sendBeacon) !== "undefined";
// cookies
@@ @@ -122,6 +123,13 @@
});
}
+ function trackNow(event) {
+ ready( function () {
+ var payload = new Blob([JSON.stringify([event])], {type : "application/json; charset=utf-8"});
+ navigator.sendBeacon(eventsUrl, payload)
+ });
+ }
+
function page() {
return ahoy.page || window.location.pathname;
}
@@ @@ -232,13 +240,17 @@
};
log(event);
- eventQueue.push(event);
- saveEventQueue();
+ if (canTrackNow) {
+ trackNow(event);
+ } else {
+ eventQueue.push(event);
+ saveEventQueue();
- // wait in case navigating to reduce duplicate events
- setTimeout( function () {
- trackEvent(event);
- }, 1000);
+ // wait in case navigating to reduce duplicate events
+ setTimeout( function () {
+ trackEvent(event);
+ }, 1000);
+ }
};
ahoy.trackView = function () {