imweb-report
Version:
report to tdw width cgi;you can report one data at least;if you have some question;please contact herbertliu
200 lines (173 loc) • 6.27 kB
JavaScript
/**
* @author herbertliu,littenli
* @date 2014-06-10 version 0.2
* @description 通过cookie上报,获取页面参数,然后进行cookie设置,页面cookie上报,依赖report,jquery
* @example report.cookie.config(params,args) //获取上报的属性字符串
* params params {Object} 需要cookie上报字段集合,例如:
* {
* '_BASE' : {}
* 'from' : {
* '_BASE':{}
* '1' : {'uin':'','ts':'','opername':'','module':'','action':'','obj1':'','obj2':'','obj3':'','action':'','ver1':'','ver2':'','ver3':'','ver4':''},这里ts表示时间戳,不传使用服务器时间戳,objs表示用户ip,也不需要传
* }
* }
* params args {Boolean} 是否自动上报
*
* @example
*/
;(function(root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD loading: define module named "badjs" with dependencies and build it
define(['report','jquery','common/util.cookie','common/report.cookie.init'],factory);
} else {
// traditional browser loading: build badjs object with dependencies and inject it into window object
root['report'] = factory(root['report'],root['jQuery'],root['Cookie']);
}
})(this, function(report,$,cookie) {
var _cookie = report.cookie || (report.cookie = {});
var _COOKIE_BASE = _cookie.__ || (_cookie.__ = '_cookie_tdw_');
var PROTOCOL=document.location.protocol,
DOMAIN = document.location.hostname,
PATH = '',
HOUER = 24;//默认24小时
var _REFERER = document.referrer,
_REFERER_PROTOCOL = new RegExp('^' + PROTOCOL + '\\/\\/','ig'),
_REFERER_DEPTH = new RegExp('([^\\.\\/]+)(\\.[^\\.\\/]+)+','ig');
//report cookie全局配置
var _CONF = _cookie.CONF || (_cookie.CONF = {});
if(!_CONF.DATA){
_CONF.DATA = {//配置需要上报的数据字段,其中BASE都是基于当前上报的基础字段设置
//'_BASE' : {}, //{'uin':'624005743'}
//'from' :{'_BASE': {} , '1' : {}} //例子:{'_BASE': {'ts':'ts','opername':'test'} , '1' : {action: 'Teach-new'}}
'_BASE': {
action:"testFrom"
},
'from' : {
"90":{
ver4: "test again"
}
}
}
}
_CONF.ISREPORT = true;//是否自动上报
//console.log(_CONF.DATA);
//增加支持基础参数扩展
function extend(param){
if(!param) return;
for(var i = 0 ,len = arguments.length ; i < len ; i ++){
if(!i) continue;
var _arguments = arguments[i];
for(var j in _arguments){
param[j] = _arguments[j]
}
}
return param;
}
//设置cookie的值
function setCookieParam(name, value, domain, path, hour){
if(!name) return;
domain = domain || DOMAIN;
path = path || PATH;
hour = hour || HOUER;
$.cookie.set(_COOKIE_BASE + name , value , domain, path, hour);
}
//获取参数或者hash中的固定参数值
function getQueryParam(name){
return $.bom.query(name) || $.bom.getHash(name);
}
//获取参数或者hash中的固定参数值
function getCookieParam(name){
return $.cookie.get(_COOKIE_BASE + name);
}
//删除cookie的值
function delCookieParam(name, domain, path){
if(!name) return;
domain = domain || DOMAIN;
path = path || PATH;
$.cookie.del(_COOKIE_BASE + name , domain, path);
}
//检查cookie的referer是否存在
function checkCookieReferer(){
if(_REFERER.match(_REFERER_PROTOCOL)){//协议一致
var _from_hostname = _REFERER.match(_REFERER_DEPTH);
if(_from_hostname && (_from_hostname = _from_hostname[0])){
return DOMAIN.match(new RegExp(_from_hostname,"ig")) || _from_hostname.match(new RegExp(DOMAIN,"ig"));//支持父级域名向子级跳转
}else{
return null;
}
}else{
return null;
};
}
//获取COOKIE上报的字段值集合
function getCookieReportAttr(cb){
for(var i in _CONF.DATA){
if(i === '_BASE') continue;
cb && cb( i , _CONF.DATA[i] );
}
}
function _initialize(){
//初始化信息
getCookieReportAttr(function(index , items){
var value = getQueryParam(index);
var isFromParent = false;//说明referer来源是父域名并且数据来自cookie
if(!value){
value = getCookieParam(index);//从cookie中获取,存在cookie值
if(value){
var _checks;
if(!(_checks = checkCookieReferer())){//来源检查,不合格,清除cookie
delCookieParam(index);
return true;
}else{
//验证通过
if(_checks[0] !== DOMAIN){
//说明referer来源是父域名
isFromParent = true;
}
}
}else{
//说明是空值
//return true;//不存在value
}
}
var _data = items[value];
if(!_data){
//没有上报值
delCookieParam(index);
return true;
}else if(isFromParent){
delCookieParam(index);//删除当前域下同名cookie
};
var _param = extend({} ,_CONF.DATA._BASE,items['_BASE'], _data);
_CONF.ISREPORT && report.tdw(_param);
if(!isFromParent) setCookieParam(index,value);//当referer来源是父域名并且数据来自cookie,不需要重新设置本域cookie
});
}
/**
* tdw设置cookie方式上报config属性值
* params params {Object} 需要cookie上报字段集合,例如:
* {
* '_BASE' : {}
* 'from' : {
* '_BASE':{}
* '1' : {'uin':'','ts':'','opername':'','module':'','action':'','obj1':'','obj2':'','obj3':'','action':'','ver1':'','ver2':'','ver3':'','ver4':''},这里ts表示时间戳,不传使用服务器时间戳,objs表示用户ip,也不需要传
* }
* }
* params args {Boolean} 是否自动上报
*/
_cookie.config = function(params,args){
if(params){
for(var i in params){
if(params[i] === 0){//当值恒等于0的时候删除改上报字段
delete _CONF.DATA[i];
}else{
_CONF.DATA[i] = params[i];
}
}
}
_CONF.ISREPORT = !args;
}
_cookie.getConfig = _CONF;
_initialize();
return report;
});