Web beacon JavaScript library


This topic presents an example of the JavaScript code with which you must instrument your web applications.

The web beacon JavaScript library accomplishes the following actions:

  • Verifies the browser type (variations in browser implementation require different methods, depending on the browser type)
  • Adds a reference to a function (the system's call-back function) into the event queue that the browser executes when the page finishes loading (window.onLoad event).
  • When the page finishes rendering, the call-back function runs and results in a GET request, which is sent to the origin server, where it is intercepted and used to derive timing information. This URL contains a randomly generated query parameter to prevent browser caching.

Obtain the web beacon JavaScript from the RIA Visability toolkit on the  PDFs-and-videos page, or contact your BMC Customer Support representative.

Web beacon JavaScript library code

/* tsedge_instr-min.js - Minified version - v0.9.5 */
if(typeof tsedge == "undefined"){
  var tsedge = {};
  tsedge.instr = {
    PL_GO_IMG: "crd_prm_go", // name for PRM GO file name
    onLoadEventAttached: false,
    prmSent: false, // has the PageRenderMarker been sent ?
    random: Math.floor(Math.random() * 1000000),
    pagestart_ts : new Date().getTime(),
    pageend_ts: 0,
    counter: 0.00,
    url: null,
    version: '0.9.5',

    bind: function(fct, context){ //allow execution of a function controlling it's
    context
      if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this;
      return function() {
        return fct.apply(context);
      }
    },
    getCounter: function(){
      return (this.counter.toString().indexOf(".") >= 0) ?
      this.counter.toString() : this.counter.toString() + '.00';
    },
    getHost: function(markerName){
      var host = "";
      var rxp = new RegExp("http[s]?://([Web beacon JavaScript library^/]*)/(.*)");
      if(rxp.exec(markerName)){ //The PL_GO_IMG is already a full path, use it
        directly
        host = markerName;
      }else{
        var pageLoc = rxp.exec(window.location);
        var fsPos = markerName.indexOf("/");
        //build the protocol + domain
        host = location.protocol + "//" + location.hostname;
        if(fsPos == 0){ //leading /
          //If GO is relative to the domain, just add the GO
          host = host + markerName;
        }else { //no leading /
          //If GO is relative to the actual page, build the path and add the GO
          host = host + location.pathname.substring(0,
          location.pathname.lastIndexOf('/')+1) + markerName;
        }
      }
      return host;
    },
    sendPageRenderMarker: function(){
      if(!this.prmSent){
        this.pageend_ts = new Date().getTime();
        this.counter += 0.01;
        this.host = tsedge.instr.getHost(this.PL_GO_IMG);
        var markerURL = [];
        markerURL.push(this.host);
        markerURL.push("?crd_ver=");markerURL.push(this.version); //random
          unique page id
        markerURL.push("&crd_rnd=");markerURL.push(this.random); //random
          unique page id
        markerURL.push("&crd_cnt=");markerURL.push(this.getCounter()); //
          counter
        if(this.pageend_ts > 0) {
        markerURL.push("&crd_tpb=");markerURL.push(this.pagestart_ts); //
          page start timestamp
        markerURL.push("&crd_olt=");markerURL.push(this.pageend_ts -
          this.pagestart_ts); //page load time
      }
      this.url = markerURL.join("");
      var markerImg = new Image();
      markerImg.src = this.url;
      this.prmSent = true;
    }
  },
  attachOnLoadPageRenderMarker: function(){
    if(this.onLoadEventAttached) { return; } //attach only once
    try{
      this._sendPageRenderMarker =
        tsedge.instr.bind(tsedge.instr.sendPageRenderMarker, this);
      if(window.attachEvent){ //IE
        window.attachEvent("onload", this._sendPageRenderMarker );
      }else
      if( window.addEventListener){ //FF, Opera, Safari...
        window.addEventListener("load", this._sendPageRenderMarker , false);
      }else
      if( document.addEventListener){ //FF, Opera, Safari... when window is
        not set
        document.addEventListener("load", this._sendPageRenderMarker ,
        false);
      }
      this.onLoadEventAttached = true;
    }catch(e){ /* */ }
  }
  };
  tsedge.instr.attachOnLoadPageRenderMarker();
}

Example of the proper script placement

<html>
<head>
<!--Insert Web beacon JavaScript at the beginning of the
head section-->
<script language="javascript" src="tsedge_instr-min.js"></script>
<!--Insert existing head section content-->
...
</head>
<body>
<!--No changes needed in body section-->
...
</body>
</html>
Error
Warning

Placing the script element in other parts of the page can result in inaccurate timing.

 

Tip: For faster searching, add an asterisk to the end of your partial query. Example: cert*

BMC TrueSight App Visibility Manager 10.5