(window.AlipayH5Performance && !window.AlipayCallFromJS) || (function(){ var iframe = {}; var sendMessageQueue={}; var timerHandler={}; function type(obj) { return Object.prototype.toString.call(obj).replace(/\[object (\w+)\]/, '$1').toLowerCase(); } var monitorKernel={ init:function(){ this.init=null; this.renderIframe(); this.monitorDOMReady(); this.monitorPageLoad(); this.monitorJSErrors(); this.monitorDNSTime(); this.monitorCacheRate(); this.monitorMixedContent(); }, monitorDOMReady:function(){ var t=this; var readyRE = /complete|loaded|interactive/; if (readyRE.test(document.readyState)) { t.pushMessage('monitor',{ name:'domReady', value:new Date().getTime(), extra:'completed' }); t.sendSignal(); } else { document.addEventListener("DOMContentLoaded", function(event) { t.pushMessage('monitor',{ name:'domReady', value:event.timeStamp?event.timeStamp:new Date().getTime(), extra:'complete' }); t.sendSignal(); },true); } }, monitorPageLoad:function(){ var t=this; window.addEventListener("load", function(event) { t.pushMessage('monitor',{ name:'pageLoad', value:event.timeStamp?event.timeStamp:new Date().getTime(), extra:'load' }); t.sendSignal(); },true); }, monitorJSErrors:function(){ var t=this; window.addEventListener("error", function(event) { if (event.message) { t.pushMessage('monitor',{ name:'jsErrors', value:event.message, filename:event.filename, lineno:event.lineno }); t.sendSignal(); } },true); }, monitorDNSTime:function(){ var t=this; window.addEventListener("load", function(event) { if(window.performance && window.performance.timing && window.performance.timing.domainLookupEnd-window){ t.pushMessage('monitor',{ name:'dns', value:window.performance.timing.domainLookupEnd-window.performance.timing.domainLookupStart, extra:'support' }); }else{ t.pushMessage('monitor',{ name:'dns', value:'', extra:'notsupport' }); } t.sendSignal(); },true); }, monitorMixedContent:function(){ var t=this; var errorArr=[]; var readyRE = /complete|loaded|interactive/; if (readyRE.test(document.readyState)) { window.location.protocol == 'https:' && [].slice.call(document.querySelectorAll('link[rel=stylesheet][href^="http:"], script[src^="http:"], img[src^="http:"]')).forEach(function (elem) { errorArr.push(elem.tagName + ':' + (elem.src || elem.href)); }); if(errorArr.length>0){ t.pushMessage('monitor',{ name:'mixedContent', value:errorArr.join('@|@') }); t.sendSignal(); } } else { document.addEventListener("DOMContentLoaded", function(event) { window.location.protocol == 'https:' && [].slice.call(document.querySelectorAll('link[rel=stylesheet][href^="http:"], script[src^="http:"], img[src^="http:"]')).forEach(function (elem) { errorArr.push(elem.tagName + ':' + (elem.src || elem.href)); }); if(errorArr.length>0){ t.pushMessage('monitor',{ name:'mixedContent', value:errorArr.join('@|@') }); t.sendSignal(); } },true); } }, monitorCacheRate:function(){ var t=this, result={ name:'cacheRate' },resourceArr; window.addEventListener("load", function(event) { if(window.performance && typeof window.performance.getEntriesByType ==='function' && (resourceArr=window.performance.getEntriesByType("resource"))){ if(resourceArr.length>0){ var cacheCount=0; for(var i=0;i<resourceArr.length;i++){ if(resourceArr[i].duration===0){ cacheCount++; } } result.value=(cacheCount/resourceArr.length).toFixed(4); }else{ result.value=0.0000; } result.extra='support'; }else{ result.value=''; result.extra='notsupport'; } t.pushMessage('monitor',result); t.sendSignal(); },true); }, sendSignal:function(timer,tag){ timer = (typeof timer=='number' &&timer>=0)?timer:500; tag = tag || 'monitor'; clearTimeout(timerHandler[tag]); timerHandler[tag]=setTimeout(function(){ if (!(iframe && iframe[tag])){ monitorKernel.renderIframe(tag); } iframe[tag].src='alipay'+tag.toLowerCase()+'://dispatch_'+tag.toLowerCase()+'_message'; },timer); }, renderIframe:function(tag) { tag = tag || 'monitor'; if (iframe && iframe[tag]) return; try { var iframeElement = document.createElement("iframe"); iframeElement.id = "__AlipayH5"+tag+"Iframe"; iframeElement.style.display = "none"; document.documentElement.appendChild(iframeElement); iframe[tag] = iframeElement; } catch (e) {} }, pushMessage:function(tag,obj){ tag = tag || 'monitor'; if(!(sendMessageQueue && type(sendMessageQueue[tag]) == 'array')){ sendMessageQueue[tag] = []; } sendMessageQueue[tag].push(obj); }, getMessage:function(tag){ tag = tag || 'monitor'; if(!(sendMessageQueue && type(sendMessageQueue[tag]) == 'array')){ sendMessageQueue[tag] = []; } var messageQueueString = JSON.stringify(sendMessageQueue[tag]); sendMessageQueue[tag] = []; return messageQueueString; } } monitorKernel.init(); var monitorInterface={ fetchMessageQueue: function (tag) { return monitorKernel.getMessage(tag); }, pushMessage:function(tag,obj){ monitorKernel.pushMessage(tag,obj); }, addTrackData:function(obj,tag){ tag = tag || 'monitor'; if(obj.value){ obj.value+=('|time='+new Date().getTime()); } monitorKernel.pushMessage(tag,obj); monitorKernel.sendSignal(0); }, addTimeReport:function(obj){ var objStr = ''; for(var item in obj){ objStr += (((objStr=='')?'':'&')+item+'='+obj[item]); } monitorInterface.addTrackData({ 'name':'timeReport', 'value':objStr }); }, sendSignal:function(tag){ monitorKernel.renderIframe(tag); monitorKernel.sendSignal(0,tag); }, version:'1.2' } window.AlipayH5Performance = monitorInterface; })(); (window.AlipayH5Report && !window.AlipayCallFromJS) || (function(){ if (navigator.userAgent.indexOf(' AlipayClient/') < 0) { return; } var monitorInterface={ fetchMessageQueue: function (tag) { return window.AlipayH5Performance.fetchMessageQueue('report'); } } window.AlipayH5Report = monitorInterface; })();