Skip to content

Instantly share code, notes, and snippets.

Avatar

Nic Jansma nicjansma

View GitHub Profile
@nicjansma
nicjansma / boomerang-disableunload-plugin.js
Created May 25, 2022
Boomerang DisableUnloadBeacon plugin
View boomerang-disableunload-plugin.js
/**
* The Boomerang DisableUnloadBeacon plugin disables sending of the Unload beacon.
*
* The Unload beacon can be used to understand Session Duration (seconds on the page), but may not be needed in all cases.
*/
(function() {
window.BOOMR = window.BOOMR || {};
window.BOOMR.plugins = window.BOOMR.plugins || {};
window.BOOMR.plugins.DisableUnloadBeacon = {
@nicjansma
nicjansma / boomerang-cwv-plugin.js
Last active Apr 22, 2022
Boomerang CWV plugin that sends an additional Exit beacon before unload with FID (if it didn't happen by page load) and the SUM of CLS
View boomerang-cwv-plugin.js
/**
* The Boomerang CWV plugin assists in sending Core Web Vitals metrics First Input Delay (FID) and
* Cumulative Layout Shift (CLS) at the end of the page session. It does this by sending
* an additional "Page Exit" beacon prior to unload.
*
* The main changes in behavior over the EventTiming plugin (which sends FID) and Continuity
* plugin (which sends CLS) are:
*
* * If FID was _not_ on the Page Load beacon, this plugin sends FID on the Page Exit beacon.
* If FID was on the Page Load beacon, it is _not_ repeated on the Page Exit beacon.
@nicjansma
nicjansma / boomerang-wait-after-onload-plugin.js
Last active Apr 20, 2022
The WaitAfterOnload Boomerang plugin waits for the specified number of seconds after * onload before a beacon is sent.
View boomerang-wait-after-onload-plugin.js
/**
* The `WaitAfterOnload` Boomerang plugin waits for the specified number of seconds after
* onload before a beacon is sent.
*
* It does not affect the Page Load time (`t_done`) -- it just delays a beacon
* for the specified number of seconds. This allows the beacon to contain additional
* ResourceTiming data and other metrics/timers that might happen after page load.
*
* NOTE: Any plugin like this that delays a beacon from being sent after onload
* will have an effect on total number of beacons captured (due to the visitor
@nicjansma
nicjansma / fiddler-boomerang-helpers.js
Last active Jan 17, 2021
Fiddler FiddlerScript helpers for Boomerang
View fiddler-boomerang-helpers.js
//
// Helper Functions
//
// Gets a parameter from the URL
static function extractGetParameter(name, query) {
return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(query) || [,""])[1].replace(/\+/g, '%20')) || null;
}
// Gets a POST or GET parameter
@nicjansma
nicjansma / boomerang-beaconrepeater.js
Last active Apr 20, 2022
Boomerang plugin to repeat all beacons to a second URL.
View boomerang-beaconrepeater.js
/**
* Repeats all beacons to a second URL.
*
* To configure, update BEACON_URL.
*
* This code repeats some code from Boomerang. If you only need to send
* XHR beacons, or only image beacons, or not sendBeacon(), it could be trimmed down.
*
* @class BOOMR.plugins.BeaconRepeater
*/
@nicjansma
nicjansma / resourcetiming-iframe.js
Last active May 30, 2020
ResourceTiming leak to parent frames
View resourcetiming-iframe.js
//
// Placed in any cross-origin IFRAMEs
//
if (window !== window.top) {
if (typeof window.PerformanceObserver !== "function") {
return;
}
// Listen for all ResourceTimings, repeating them to the parent window
var observer = new PerformanceObserver(function(entries) {
@nicjansma
nicjansma / resourcetiming-crawl.js
Last active Jul 23, 2018
Naive ResourceTiming crawl of all IFRAMEs
View resourcetiming-crawl.js
//
// Naive ResourceTiming crawl of all IFRAMEs.
//
// Based on https://github.com/SOASTA/boomerang/blob/master/plugins/restiming.js
// which you should use to deal with all of the caveats (e.g. startTime adjusting)
//
function isFrameAccessible(frame) {
var dummy;
@nicjansma
nicjansma / boomerang-duplicate-custom-timers-to-beacon.js
Last active Apr 20, 2022
Boomerang plugin that duplicates any mPulse Custom Timers that are logged in the beacon's t_other parameter into distinct beacon parameters
View boomerang-duplicate-custom-timers-to-beacon.js
/**
* The `DuplicateTimersToBeacon` Boomerang plugin duplicates any mPulse Custom Timers
* that are logged in the beacon's `t_other` parameter into distinct beacon parameters.
*
* e.g:
*
* t_other=boomerang|17,boomr_fb|2516,boomr_ld|2351,boomr_lat|165,custom5|2112,custom0|27
*
* Will add two more beacon parameters:
*
@nicjansma
nicjansma / boomerang-waitforjsvar-plugin.js
Last active Apr 20, 2022
Boomerang plugin that waits for the specified JavaScript variable to exist on the page before a beacon is sent.
View boomerang-waitforjsvar-plugin.js
/**
* The `WaitForJsVar` Boomerang plugin waits for the specified JavaScript variable
* to exist on the page before a beacon is sent.
*
* It does not affect the Page Load time (`t_done`) -- it just delays a beacon
* until the variable exists. This allows the beacon to contain additional
* ResourceTiming data and other metrics/timers that might happen after page load.
*
* NOTE: Any plugin like this that delays a beacon from being sent after onload
* will have an effect on total number of beacons captured (due to the visitor
@nicjansma
nicjansma / boomerang-waitformark-plugin.js
Last active Apr 20, 2022
Boomerang plugin that waits for the specified UserTiming Mark (or Measure) to exist on the page before a beacon is sent.
View boomerang-waitformark-plugin.js
/**
* The `WaitForMark` Boomerang plugin waits for the specified UserTiming Mark
* (or Measure) to exist on the page before a beacon is sent.
*
* It does not affect the Page Load time (`t_done`) -- it just delays a beacon
* until the Mark exists. This allows the beacon to contain additional
* ResourceTiming data and other metrics/timers that might happen after page load.
*
* NOTE: Any plugin like this that delays a beacon from being sent after onload
* will have an effect on total number of beacons captured (due to the visitor