常用js

/**
* 本文件的功能有
* 合并JSAPI wg.badjs.js wg.header.js
*/

//===============wg.badjs.js begin===================
window.onerror = function(msg, url, line) {
if (!window._last_err_msg) {
window._last_err_msg = msg;
} else {
if (window._last_err_msg.indexOf(msg) > -1) {
return;
} else {
window._last_err_msg += "|" + msg;
}
}
setTimeout(function() {
var c = encodeURIComponent(msg || url || line),
img = new Image();
img.src = "http://wq.jd.com/webmonitor/collect/badjs.json?Content=" + c + "&t=" + Math.random();
}, 1000);
};
//===================wg.header.js begin==============
(function(name) {
var $ = {};
//用于普通上报
$.send = function(url) {
var _guid = (new Date()).getTime(),
_rName = '_COUNTRD' + _guid++;
try {
// 上报
window[_rName] = new Image();
window[_rName].src = url;
} catch (e) {}
};
//用于加载js,opt是可选参数,目前支持charset,onLoad
$.sendJs = function(url, opt) {
var el = document.createElement("script");
opt = opt || {};
el.charset = opt.charset || "utf-8";
el.onload = el.onreadystatechange = function() {
if (/loaded|complete/i.test(this.readyState) || navigator.userAgent.toLowerCase().indexOf("msie") == -1) {
opt.onLoad && opt.onLoad(); //成功之后的回调
clear();
}
};
el.onerror = function() {
clear();
};
el.src = url;
opt.defer && (el.defer = 'defer');
opt.async && (el.async = 'async');
document.getElementsByTagName('head')[0].appendChild(el);

function clear() {
if (!el) {
return;
}
el.onload = el.onreadystatechange = el.onerror = null;
el.parentNode && (el.parentNode.removeChild(el));
el = null;
}
};
//设备相关(网络,屏幕等)
$.device = {
retina: window.devicePixelRatio >= 1.5, //是否是retina屏幕
sticky: (function() { //是否支持css3的 sticky特性
var t, n = '-webkit-sticky',
e = document.createElement("i");
e.style.position = n;
t = e.style.position;
e = null;
return t === n;
})(),
scene: (function() {
var ua = navigator.userAgent.toLowerCase();
return (ua.indexOf('micromessenger')) > -1 ? 'weixin' : ((/qq\/([\d\.]+)*/).test(ua) ? 'qq' : 'mobile');
})()
};
//性能相关
$.performance = {
useScaleImg: function() { //是否应该使用压缩图
var network = $.cookie.get("network"),
retina = $.device.retina;
return network != "wifi" || !retina;
},
img: function(path) {
return /\.png$/.test(path) ? path : path + '.webp';
}
};

//手动上报相关 itil rd badjs
$.report = {
itil: function(option) {
var opt = {
bid: "1", //业务id(后台分配)
mid: "01", //页面id(后台分配)
res: [], //页面监控业务的结果数组(
onBeforeReport: null, //上报前回调函数
delay: 5000 //延迟上报时间(ms)
};
for (var k in option) {
opt[k] = option[k];
}
if (opt.res.length > 0) {
//设置itil上报空回调,减少badjs
window.reportWebInfo = function(json) {};
//页面加载5s后上报
window.setTimeout(function() {
opt.onBeforeReport && opt.onBeforeReport(opt);
var pstr = opt.bid + opt.mid + "-" + opt.res.join("|");
var url = "http://bases.wanggou.com/mcoss/webreport/ReportWebInfo?report=" + pstr + "&t=" + new Date() / 1000;
$.send(url);
}, opt.delay);
}
},
rd: function(rd) {
var rds;
!this._rdList && (this._rdList = []);

if (window.ECC_cloud_report_pv) {
reportRd(rd);
rds = this._rdList;
rdTask();
} else {
this._rdList.push(rd);
}

function rdTask() {
if (!rds.length) {
return;
}
var ptag = rds.shift();
reportRd(ptag);
setTimeout(rdTask, 30);
}
//手动上报
function reportRd(data) {
if (!data) {
return;
}
data = ({}).toString.call(data) == '[object Object]' ? data : {
ptag: data
};
//上报北京侧
window.ja.trace(data);
//上报深圳侧
ECC.cloud.report.trace(data);

}

},
badJs: function(msg, url) {
url = url || location.href.replace(/\?.*$/g, "");
var mylog = new Image();
mylog.src = 'http://party.paipai.com/cgi-bin/badjs?Browser=mobilelog&Url=' + url + '&Content=' + msg + '&t=' + Math.random();
}
};

$.cookie = {
get: function(name) {
//读取COOKIE
var reg = new RegExp("(^| )" + name + "(?:=([^;]*))?(;|$)"),
val = document.cookie.match(reg);
return val ? (val[2] ? unescape(val[2]) : "") : null;
},
set: function(name, value, expires, path, domain, secure) {
//写入COOKIES
var exp = new Date(),
expires = arguments[2] || null,
path = arguments[3] || "/",
domain = arguments[4] || null,
secure = arguments[5] || false;
expires ? exp.setMinutes(exp.getMinutes() + parseInt(expires)) : "";
document.cookie = name + '=' + escape(value) + (expires ? ';expires=' + exp.toGMTString() : '') + (path ? ';path=' + path : '') + (domain ? ';domain=' + domain : '') + (secure ? ';secure' : '');
},
del: function(name, path, domain, secure) {
//删除cookie
var value = this.get(name);
if (value != null) {
var exp = new Date();
exp.setMinutes(exp.getMinutes() - 1000);
path = path || "/";
document.cookie = name + '=;expires=' + exp.toGMTString() + (path ? ';path=' + path : '') + (domain ? ';domain=' + domain : '') + (secure ? ';secure' : '');
}
}
};

$.url = {
/**
* 设置hash
* @param name
*/
setHash: function(name) {
setTimeout(function() {
location.hash = name;
}, 0);
},
/**
* 获取当前url中的hash值
* @param url
* @return String
*/
getHash: function(url) {
var u = url || location.hash;
return u ? u.replace(/.*#/, "") : "";
},
/*
* 从hash中获取name对应的值
*/
getHashParam: function(name) {
var result = this.getHash().match(new RegExp("(^|&)" + name + "=([^&]*)(&|$)"));
return result != null ? result[2] : "";
},
/*
* 从URL中获取参数对应的值
*/
getUrlParam: function(name, url) {
//参数:变量名,url为空则表从当前页面的url中取
var u = arguments[1] || window.location.search,
reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"),
r = u.substr(u.indexOf("\?") + 1).match(reg);
return r != null ? r[2] : "";
},
parseUrl: function(url) {
var a = document.createElement('a');
a.href = url;
return {
source: url,
protocol: a.protocol.replace(':', ''),
host: a.hostname,
port: a.port,
query: a.search,
params: (function() {
var ret = {},
seg = a.search.replace(/^\?/, '').split('&'),
len = seg.length,
i = 0,
s;
for (; i < len; i++) {
if (!seg[i]) {
continue;
}
s = seg[i].split('=');
ret[s[0]] = s[1];
}
return ret;
})(),
file: (a.pathname.match(/([^\/?#]+)$/i) || [, ''])[1],
hash: a.hash.replace('#', ''),
path: a.pathname.replace(/^([^\/])/, '/$1'),
relative: (a.href.match(/tps?:\/\/[^\/]+(.+)/) || [, ''])[1],
segments: a.pathname.replace(/^\//, '').split('/')
};
},
addRd: function(url, rd) {
url = url.replace(/?/g, "?"); //异常处理
var reg = /ptag[=,]\d+\.\d+\.\d+/i, //有两种情况,PTAG=20219.28.10和PTAG,20219.28.10(网购搜索特有)
hasQuery = /\?/.test(url);
hasAnchor = url.indexOf('#') > -1;
if (reg.test(url)) { //已经有rd的情况,则进行替换
url = url.replace(reg, "PTAG=" + rd);
} else { //没有rd,则进行追加
url = hasAnchor ? url.replace("#", (hasQuery ? "&" : "?") + "PTAG=" + rd + "#") : (url + (hasQuery ? "&" : "?") + "PTAG=" + rd);
}
return url;
},
/**
* smartbox组件url
*/
smartboxUrl: 'http://wq.360buyimg.com/js/common/dest/jd.smartbox.min.js?t=201502051140'
};
window[name] = $;
})("JD");

//================wg.header.js end=======================

posted on 2015-05-13 23:18  西湖浪子  阅读(307)  评论(0)    收藏  举报