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 () { | |