// CLIENT API KEY var api = 'lite.visitor.info'; (function() { // CHECK FOR API KEY if (!api) { console.error('client.js has no API key'); return; } // ENVIRONMENT ORIGIN var origin; // TODO: move to outer settings file if (location.host === '127.0.0.1:5000') origin = 'http://' + location.host; else origin = 'https://visitor.info'; // CREATE VISITOR CONTAINER var container = document.createElement('div'); container.style.position = 'absolute'; container.style.top = '-10000px'; document.body.appendChild(container); var frame_name = 'visitor_frame', url = origin + '/visitor/iframe?api=' + api; var iframe = document.createElement('iframe'); iframe.name = frame_name; iframe.src = url; container.appendChild(iframe); var form = document.createElement('form'); form.action = url; form.method = 'POST'; form.target = frame_name; container.appendChild(form); // LISTEN FOR IFRAME SCRIPT MESSAGE var iframe_listener = function(event) { // CLIENT CALLBACK FUNCTION HANDLER if (typeof visitorCallback !== 'undefined' && typeof visitorCallback === 'function') { console.log('RUN client defined callback function'); visitorCallback(event.data); } }; if (window.addEventListener) window.addEventListener('message', iframe_listener, false); else window.attachEvent('onmessage', iframe_listener); // INITIAL VISITOR DATA var visitor = { 'display_window': { 'width': window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth, 'height': window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight }, 'http_referrer': document.referrer }; // POST VISITOR DATA TO MAIN VISITOR SCRIPT window.onload = function() { window.frames[iframe.name].postMessage(visitor, '*'); }; })(); // compatibility with older version // TODO: review code if(!Visitor)var Visitor=function(){return{init:function(f){}}};