Skip to content

Instantly share code, notes, and snippets.

@black-black-cat
Created July 12, 2016 12:34
Show Gist options
  • Save black-black-cat/aefb3aa808f12b71df33e2bcc2d5b546 to your computer and use it in GitHub Desktop.
Save black-black-cat/aefb3aa808f12b71df33e2bcc2d5b546 to your computer and use it in GitHub Desktop.
前端工具方法
var B = {};
B.url = {};
// 获取search 或 hash 中的参数
B.url.getParam = function(name, url) {
url = url || location.href;
var reg = new RegExp("(^|&|\\?|#)" + name + "=([^&]*?)(&|#|$)");
var tempHash = url.match(/#.*/) ? url.match(/#.*/)[0] : "";
url = url.replace(/#.*/, "");
if (reg.test(tempHash)) {
return decodeURIComponent(tempHash.match(reg)[2]);
} else if (reg.test(url)) {
return decodeURIComponent(url.match(reg)[2]);
} else {
return '';
}
};
// 时间格式化函数 author: meizz
// (new Date()).format("yyyy-MM-dd hh:mm:ss.S") => 2006-07-02 08:09:04.423
// (new Date()).format("yyyy-M-d h:m:s.S") => 2006-7-2 8:9:4.18
Date.prototype.format = function(fmt) {
var o = {
"M+": this.getMonth() + 1, //月份
"d+": this.getDate(), //日
"h+": this.getHours(), //小时
"m+": this.getMinutes(), //分
"s+": this.getSeconds(), //秒
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
"S": this.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return fmt;
};
B.url.setParam = function(name, value, url, isHashMode) {
if (typeof name === 'undefined' || typeof value === 'undefined' || typeof url === 'undefined') {
return url;
}
var separator, reg = new RegExp("(^|&|\\?|#)" + name + "=([^&]*?)(&|#|$)"),
tempHash = url.match(/#.*/) ? url.match(/#.*/)[0] : "";
url = url.replace(/#.*/, '');
if (isHashMode === true) {
if (reg.test(tempHash)) {
tempHash = tempHash.replace(reg, function(m, r1, r2, r3) {
return r1 + name + "=" + encodeURIComponent(value) + r3;
});
} else {
separator = tempHash.indexOf("#") === -1 ? "#" : "&";
tempHash = tempHash + separator + name + "=" + encodeURIComponent(value);
}
tempHash = tempHash.replace(reg, function(m, r1, r2, r3) {
return r1 + name + "=" + encodeURIComponent(value) + r3;
});
return tempHash + url;
} else if (reg.test(url)) {
url = url.replace(reg, function(m, r1, r2, r3) {
return r1 + name + "=" + encodeURIComponent(value) + r3;
});
} else {
separator = url.indexOf("?") === -1 ? "?" : "&";
url = url + separator + name + "=" + encodeURIComponent(value);
}
return url + tempHash;
};
B.url.parseHash = function(hash) {
var tag, query, param = {};
var arr = hash.split('?');
tag = arr[0];
if (arr.length > 1) {
var seg, s;
query = arr[1];
seg = query.split('&');
for (var i = 0; i < seg.length; i++) {
if (!seg[i]) continue;
s = seg[i].split('=');
param[s[0]] = s[1];
}
}
return {
hash: hash,
tag: tag,
query: query,
param: param
};
};
B.url.serializeArray = function(params) {
var param = {}, temp;
try {
params = params.split('&');
for (var i = 0, len = params.length; i < len; i++) {
if (!params[i]) continue;
temp = params[i].split('=');
param[temp[0]] = temp[1];
}
} catch(err) {
alert('解析公用参数出错:' + err);
}
return param;
};
// 将 url 中的参数全部提取到一个对象中并返回
B.url.getObj = function(url) {
var obj = B.url.parseHash(url);
return obj.param;
};
B.url.setObj = function(url, obj) {
$.each(obj, function(key, value) {
url = B.url.setParam(key, value, url);
});
return url;
};
B.user = {};
B.user.isLogin = function() {
// var auth = ddb.pgps('chartered_bus_payEndAuth');
// var isChartered = ddb.fileName === 'chartered_bus.html';
// if (isChartered && auth == 1) {
// return true;
// }
return !!(ddb.cookie('wx_user_id') && ddb.cookie('wx_mobile') && ddb.cookie('wx_device_id'));
};
// 两个可选参数:登录返回地址(地址必须为完整地址);是否使用替换模式
B.user.login = function(referrer, replace) {
// 没有指定返回地址就用替换方式
if (typeof replace === 'undefined') {
replace = ddb.isWeixin || !referrer;
}
referrer = encodeURIComponent(referrer || location.href);
var url = 'http://' + ddb.host + '/webapp/login.html?referrer=' + referrer;
if (replace) {
location.replace(url);
} else {
location.href = url;
}
};
// 清除登录缓存
B.user.clearLogin = function(callback) {
if (ddb.isIosApp && !callback) {
return;
}
ddb.cookie('wx_user_id', '', {path: '/'});
ddb.cookie('wx_mobile', '', {path: '/'});
ddb.cookie('wx_device_id', '', {path: '/'});
ddb.cookie('wx_ddb_token', '', {path: '/'});
ddb.cookie('wx_login_token', '', {path: '/'});
ddb.cookie('wx_user_open_id', '', {path: '/'});
// 清除旧登录缓存
ddb.cookie('wx_device_id', '');
ddb.cookie('wx_mobile', '');
ddb.cookie('wx_user_id', '');
ddb.cookie('wx_ddb_token', '');
ddb.cookie('wx_login_token', '');
ddb.cookie('wx_user_open_id', '');
// 清除 sessionStorage 缓存
sessionStorage.clear();
// 清除 app 公用数据缓存
ddb.session('appCommon', null);
// 返回我的页面并重新获取 openid
// ddb.getOpenId('http://' + ddb.host + '/webapp/mine.html', ddb.isWeixin);
// location = referrer || '../login.html';
if (typeof callback === 'function') {
callback();
} else {
location.reload();
}
};
B.user.logout = function(callapi, callback) {
callback = callback || B.user.login;
if (callapi) {
var url = ddb.isWeixin ? '/app/userLoginOut/' : 'authentication/logout';
var postData = ddb.isWeixin ? {urlType: 'app'} : {};
ddb.get(url, postData, function(d) {
if (+d.ret === 0) {
B.user.clearLogin(callback);
} else {
ddb.msg(d.msg);
}
}).fail(function() {
alert('服务器错误');
});
} else {
B.user.clearLogin(callback);
}
};
var ddb = {};
ddb.version = '2.6.0';
// 判断是否在微信中
ddb.isWeixin = /MicroMessenger/i.test(navigator.userAgent);
ddb.isApp = /DaDaBusPassenger/i.test(navigator.userAgent);
// ddb.android = ua.match(/(Android);?[\s\/]+([\d.]+)?/);
ddb.isAndroidApp = ddb.isApp && $.os.android;
ddb.isIosApp = ddb.isApp && $.os.ios;
// ddb.env = 'release'; // 正式环境
// ddb.env = 'pre'; // 预发布环境
// ddb.env = 'test'; // 测试环境
// ddb.env = 'dev'; // 本地调试
// 根据二级域名判断开发环境
// PS. 此方法无法判定预发布环境,需要设置 host 来解决
ddb.dev_status = 'release';
ddb.appid = 'wx72a2b17c7ed41fe8';
switch (location.hostname.split('.')[0]) {
case 'loc':
case 'dev':
ddb.dev_status = 'dev';
ddb.appid = 'wx108854b0f729a8e5';
break;
case 'test':
ddb.dev_status = 'test';
ddb.appid = 'wx54125ac4cf97185c';
break;
case 'pre':
ddb.dev_status = 'pre';
ddb.appid = 'wx72a2b17c7ed41fe8';
break;
// case 'static':
// default:
// ddb.dev_status = 'release';
// ddb.appid = 'wx72a2b17c7ed41fe8';
}
ddb.sld = ddb.dev_status === 'release' ? '' : ddb.dev_status + '.'; // 二级域名(带.)
ddb.host = location.host.replace('static.', '');
// ddb.api = 'http://' + (ddb.dev_status === 'release' ? '' : 'test.') + 'api.buskeji.com/'; // 若开发接口抽风,可暂用测试接口
ddb.api = 'http://' + ddb.sld + 'api.buskeji.com/';
// 因微信安全域名限制正式公众号下只有 wechat.buskeji.com 域名有授权回调权限
// ddb.wxapi = ddb.dev_status === 'release' ? 'http://wechat.buskeji.com/app/api?parames=' : '/app/api?parames=';
ddb.wxapi = 'http://' + ddb.host + '/app/api?parames=';
// ddb.appid = 'wx72a2b17c7ed41fe8'; // 微信公众号 appid
ddb.appkey = ddb.dev_status === 'release' ? 'uwd1c0sxd3621' : 'pvxdm17jx8rqr'; // 融云 APPKEY
// ddb.debugMobile = '137xxx';
ddb.xhrs = [];
ddb.noop = function() {};
// 保持下发地址域名境与当前域名环境一致
ddb.fitEnv = function(url) {
if (ddb.dev_status === 'release') {
return url;
} else {
return url.replace(/\/\/(dev|test)\./, '//' + location.hostname.split('.')[0] + '.');
}
};
(function() {
// ajax 请求时初始化通用参数
function initCommon() {
var mobile = ddb.cookie('wx_mobile');
var gps = ddb.pgps('ddb_user_gps');
var cityCode = (ddb.store('ddbCity') || '').split('/')[1];
var ddbSrcId = ddb.session('ddb_src_id');
// 用户信息已改变,从缓存中重置
if (mobile && mobile !== ddb.common.mobile) {
ddb.common.mobile = mobile;
ddb.common.user_id = ddb.cookie('wx_user_id');
ddb.common.device_id = ddb.cookie('wx_device_id');
ddb.common.ddb_token = ddb.cookie('wx_ddb_token');
// 兼容旧版微信
if (!ddb.common.ddb_token) {
ddb.common.login_token = ddb.cookie('wx_login_token');
}
}
// 用户地理经纬度
if (gps) {
ddb.common.lng = gps.lng;
ddb.common.lat = gps.lat;
ddb.common.gps_sampling_time = gps.gps_sampling_time;
}
// 城市编码
if (cityCode) {
ddb.common.city_code = cityCode;
}
// 渠道号
// console.log('ddb_src_id: ', ddbSrcId);
if (ddbSrcId) {
ddb.common.ddb_src_id = ddbSrcId;
}
// 时间戳
// ddb.common.cache_time = Math.random();
// console.log('commondata: ', ddb.common);
}
function ddbAjax(opts) {
initCommon();
opts.data = $.extend({}, ddb.common, opts.data || {});
// 如果不是完整路径
if (!/^https?:/i.test(opts.url)) {
opts.url = opts.urlType === 'app' ? opts.url : ddb.api + opts.url;
}
var cache = opts.cachekey ? ddb.session(opts.cachekey) : null;
var dtd = $.Deferred();
var xhr;
function process(d) {
if ((+d.ret === 8001 || +d.ret === 8002 || +d.ret === 8003)) {
if (opts.notCheckLogin) {
B.user.clearLogin();
dtd.reject(d);
return;
}
// 清除登录态
if (B.user.isLogin()) {
B.user.logout();
return;
}
// 转到登陆页
B.user.login();
return;
}
// 获取 openid
if (+d.ret === 6001) {
if (ddb.isWeixin && !opts.notCheckLogin) {
ddb.getOpenId(0, true);
}
dtd.reject(d);
return;
}
dtd.resolve(d);
}
if (cache) {
process(cache);
return dtd.promise();
}
if (!opts.noLoading) {
ddb.loading.show();
}
xhr = $.ajax({
type: opts.type || 'GET',
url: opts.url,
data: opts.data,
dataType: opts.dataType || 'json',
cache: opts.cache || false,
timeout: 15000,
success: function(d, status, xhr) {
ddb.loading.hide();
process(d);
console.log('AJAX: ' + opts.url + '\n ', d);
// 缓存数据
if (opts.cachekey) {
ddb.session(opts.cachekey, d);
}
},
error: function(msg, type) {
ddb.loading.hide();
console.log('网络异常[' + type + ']');
dtd.reject(msg);
}
});
ddb.xhrs.push(xhr);
if (opts.returnXhr) {
return xhr;
}
return dtd.promise();
}
function DdbGet(url, postData, callback, err) {
// 如果无 postData
if (typeof postData === 'function') {
callback = postData;
err = callback;
postData = {};
}
initCommon();
postData = $.extend({}, ddb.common, postData || {});
var dtd = $.Deferred();
var cachekey = postData.cachekey;
var cache = cachekey ? ddb.session(cachekey) : null;
var xhr;
// 如果不是完整路径
if (!/^https?:/i.test(url)) {
url = postData.urlType === 'app' ? url : ddb.api + url;
}
function process(d) {
// 服务器返回未登录状态码
if ((+d.ret === 8001 || +d.ret === 8002 || +d.ret === 8003)) {
// 不检测登录态
if (postData.notCheckLogin) {
B.user.clearLogin();
dtd.reject(d);
return;
}
// 如果本地有登录态,则退出并清除登录态
if (B.user.isLogin()) {
B.user.logout();
return;
}
// 跳到登陆页面
B.user.login();
return;
}
// 未关注公众号
if (+d.ret === 6001) {
if (ddb.isWeixin && !postData.notCheckLogin) {
ddb.getOpenId(0, true);
}
dtd.reject(d);
return;
}
if (typeof callback === 'function') {
callback(d);
}
dtd.resolve(d);
}
// 如果有缓存
if (cache) {
// console.log('Cached: ', !!cache);
process(cache);
return dtd.promise();
}
if (!postData.noLoading) {
ddb.loading.show();
}
xhr = $.ajax({
url: url,
type: 'GET',
data: postData,
dataType: postData.dataType || 'json',
cache: postData.cache || false,
timeout: 15000,
success: function(d, status, xhr) {
ddb.loading.hide();
console.log('GET: ' + url + '\n ', d);
// 缓存数据
if (cachekey) {
ddb.session(cachekey, d);
}
process(d);
},
// type: timeout, error, abort, parsererror
error: function(msg, type) {
// console.log('msg: ', msg);
// console.log('type: ', type);
ddb.loading.hide();
if (typeof err === 'function') {
err(msg, type);
}
console.log('网络异常[' + type + ']');
dtd.reject(msg);
}
});
ddb.xhrs.push(xhr);
// console.log(ddb.xhrs);
if (postData.returnXhr) {
return xhr;
}
return dtd.promise();
}
function DdbPost(url, postData, callback, err) {
initCommon();
postData = $.extend({}, ddb.common, postData || {});
// 如果不是完整路径
if (!/^https?:/i.test(url)) {
url = postData.urlType === 'app' ? url : ddb.api + url;
}
var dtd = $.Deferred();
var cachekey = postData.cachekey;
var cache = cachekey ? ddb.session(cachekey) : null;
var xhr;
function process(d) {
// 服务器返回未登录状态码
if ((+d.ret === 8001 || +d.ret === 8002 || +d.ret === 8003)) {
// 如果本地有登录态,则退出并清除登录态
if (B.user.isLogin()) {
B.user.logout();
return;
}
// 跳到登陆页面
B.user.login();
return;
}
if (typeof callback === 'function') {
callback(d);
}
dtd.resolve(d);
}
// 如果有缓存
if (cache) {
// console.log('Cached: ', !!cache);
process(cache);
return dtd.promise();
}
if (!postData.noLoading) {
ddb.loading.show();
}
xhr = $.ajax({
url: url,
type: 'POST',
data: postData,
dataType: postData.dataType || 'json',
cache: postData.cache || false,
timeout: 15000,
success: function(d) {
ddb.loading.hide();
console.log('POST: ' + url + '\n ', d);
// 缓存数据
if (cachekey) {
ddb.session(cachekey, d);
}
process(d);
},
error: function(msg, type) {
ddb.loading.hide();
if (typeof err === 'function') {
err(msg, type);
}
console.log('网络异常[' + type + ']');
dtd.reject();
}
});
ddb.xhrs.push(xhr);
return dtd.promise();
}
function upload(url, postData, callback, err) {
var fd = new FormData();
url = ddb.api + url;
initCommon();
postData = $.extend({}, ddb.common, postData);
// 把 common 值添加到 formData 对象
for (var key in postData) {
if (postData.hasOwnProperty(key) && key !== 'hasOwnProperty') {
if (postData[key].name) {
fd.append(key, postData[key], postData[key].name);
} else {
fd.append(key, postData[key]);
}
}
}
// fd.append('image', postData.file, postData.file.name);
ddb.loading.show();
$.ajax({
url: url,
dataType: 'json',
type: 'POST',
data: fd,
timeout: 30000,
cache: false, // 上传文件不需要缓存
processData: false, // data是FormData对象,不需要对数据做处理
contentType: false,
// contentType: 'multipart/form-data',
success: function(d) {
ddb.loading.hide();
onsuccess(d);
console.log('UPLOAD: ' + url + '\n ', d);
},
error: function(msg, type) {
ddb.loading.hide();
if (typeof err === 'function') {
err(msg, type);
}
console.log('上传出错[' + type + ']');
}
});
function onsuccess(d) {
// 如果服务器返回未登录
if (+d.ret === 8001 || +d.ret === 8002 || +d.ret === 8003) {
// 若本地有登录缓存,清除登录缓存并转到登录页
if (B.user.isLogin()) {
B.user.logout();
return;
}
// 跳转到登陆页面
B.user.login();
return;
}
callback(d);
}
}
function DdbGetJsonp(url, postData, callback, err) {
// 如果无 postData
if (typeof postData === 'function') {
callback = postData;
err = callback;
postData = {};
}
initCommon();
postData = $.extend({}, ddb.common, postData || {});
var dtd = $.Deferred();
var cachekey = postData.cachekey;
var cache = cachekey ? ddb.session(cachekey) : null;
var xhr;
// 如果不是完整路径
if (!/^https?:/i.test(url)) {
url = postData.urlType === 'app' ? url : ddb.api + url;
}
function process(d) {
if (typeof callback === 'function') {
callback(d);
}
dtd.resolve(d);
}
// 如果有缓存
if (cache) {
process(cache);
return dtd.promise();
}
if (!postData.noLoading) {
ddb.loading.show();
}
xhr = $.ajax({
url: url,
type: 'GET',
data: postData,
dataType: 'jsonp',
cache: postData.cache || false,
jsonp: 'cb',
// jsonpCallback: 'success_jsonpCallback',
timeout: 15000,
success: function(d) {
ddb.loading.hide();
console.log(d);
// 缓存数据
if (cachekey) {
ddb.session(cachekey, d);
}
process(d);
console.log('JSONP: ' + url + '\n ', d);
},
error: function(msg, type) {
ddb.loading.hide();
if (typeof err === 'function') {
err(msg, type);
}
console.log('网络异常:', msg);
dtd.reject(msg);
}
});
ddb.xhrs.push(xhr);
return dtd.promise();
}
// 登陆成功以后,需要跳转到后台控制器去设置 session 等
function getOpenId(retUrl, isWeixin) {
var ciUrl = 'http://' + ddb.host + '/wechat_menu/getOpenId?';
// var ciUrl = 'http://' + location.host.replace(/^\w+\.wechat/, 'wechat') + '/wechat_menu/getOpenId?';
var url = '';
ciUrl = B.url.setParam('referrerSrc', retUrl ? retUrl : location.href, ciUrl);
// retUrl = retUrl || location.href;
// retUrl = retUrl.replace(/\/\/\w+\.wechat/, '//wechat');
// ciUrl = B.url.setParam('referrerSrc', retUrl, ciUrl);
isWeixin = typeof isWeixin === 'undefined' ? ddb.isWeixin : isWeixin;
if (isWeixin) {
var wxUrl = 'https://open.weixin.qq.com/connect/oauth2/authorize?';
url = B.url.setObj(wxUrl, {
appid: ddb.appid,
redirect_uri: ciUrl,
response_type: 'code',
scope: 'snsapi_base'
});
url += '#wechat_redirect';
} else {
url = ciUrl;
}
if (!B.url.getParam('hasOpenid')) {
location.replace(url);
}
}
function Cookie(name, value, options) {
options = options || {};
if (typeof value === 'undefined') {
return getCookie(name);
// } else if (value === null) {
} else if (value === null || value === '') {
return clearCookie(name, options);
} else {
return setCookie(name, value, options);
}
function setCookie(name, value, options) {
var expires = options.expires;
var path = options.path;
var domain = options.domain;
var secure = options.secure;
// 缓存时间转为日期对象
if (typeof expires === 'number') {
// expires = new Date(new Date().getTime() + expires * 1000 * 60 * 60); // 缓存时间单位:小时
// expires = new Date(new Date().getTime() + expires * 1000 * 60 * 60 * 24); // 缓存时间单位:天
expires = new Date(new Date().getTime() + expires * 864e+5); // 缓存时间单位:天
}
// if (typeof expires === 'number') {
// expires = new Date();
// expires.setDate(expires.getDate() + options.expires); // 缓存时间单位:天
// }
// document.cookie = name + '=' + escape(value) + ((expires) ? '; expires=' + expires.toGMTString() : '') + ((path) ? '; path=' + path : '; path=/') + ((domain) ? ';domain=' + domain : '');
document.cookie =
name + '=' + escape(value) +
(expires ? '; expires=' + expires.toUTCString() : '') +
(path ? '; path=' + path : '') +
(domain ? '; domain=' + domain : '') +
(secure ? '; secure' : '');
return true;
}
function getCookie(name) {
var arr = document.cookie.match(new RegExp('(^| )' + name + '=([^;]*)(;|$)'));
if (arr !== null) {
return unescape(arr[2]);
}
// return null;
return '';
}
function clearCookie(name, options) {
// document.cookie =
// name + '=' +
// (options.path ? '; path=' + options.path : '') +
// (options.domain ? '; domain=' + options.domain : '') +
// '; expires=Fri, 02-Jan-1970 00:00:00 GMT';
options.expires = new Date(0);
return setCookie(name, '', options);
}
}
function jump(page, url, replaceState) {
url = url || 'http://' + ddb.host + '/webapp/' + page;
if (replaceState) {
window.history.replaceState(history.state, '', url);
}
location = url;
}
// 数据存储(注意此方式存储经过了 JSON 解析,会还原原数据类型)
function storage(type, key, val) {
// 如果不支持本地缓存,很可能是启用了『无痕模式』
// if (!window[type]) {
// alert('为了能享受更好的服务,请关闭浏览器的无痕模式!');
// return;
// }
// 不支持/无痕模式/禁用了缓存(safari 禁用缓存会报 SecurityError: Dom Exception 18)
try {
window[type].setItem('test', 'test');
window[type].removeItem('test');
} catch (err) {
// alert(err);
alert('您开启了无痕模式或禁用了缓存,为了能享受更好的服务,请更改您的设置。');
return;
}
if (typeof val === 'undefined') { // 读取
try {
return JSON.parse(window[type].getItem(key));
} catch (r) {
return window[type].getItem(key);
}
} else if (val === null || val === '') { // 删除
return window[type].removeItem(key);
} else { // 写入
// 当本地存储满了,再往里面写数据,将会触发 error
// return window[type].setItem(key, JSON.stringify(val));
try {
return window[type].setItem(key, JSON.stringify(val));
} catch (e) {
if (type === 'sessionStorage') {
ddb.removeStoragesByKeyContains('/', type); // 删除接口的缓存
} else {
ddb.removeStoragesBut('ddbCity|isAward|ddbSearch|chartered_bus_hasin|travel_city_code|waitBusTips|common_address_' + ddb.common.user_id, type);
}
return window[type].setItem(key, JSON.stringify(val));
}
}
}
// 本地存储-localStorage
function store(key, val) {
return storage('localStorage', key, val);
}
// 本地存储-sessionStorage,可用于页面间传参
function session(key, val) {
return storage('sessionStorage', key, val);
}
// 删除 key 值中包含所给字符的缓存
function removeStoragesByKeyContains(str, type) {
var storage = window[type || 'sessionStorage'];
var len = storage.length;
var key;
// 如果不支持本地缓存,很可能是启用了『无痕模式』
if (!storage) {
alert('为了能享受更好的服务,请关闭浏览器的无痕模式!');
return;
}
// for (var i = 0; i < sessionStorage.length; i++) {
// if (sessionStorage.key(i).indexOf(val) !== -1) {
// sessionStorage.removeItem(sessionStorage.key(i));
// i--;
// }
// }
while (len) {
len--;
key = storage.key(len);
if (key.indexOf(str) !== -1) {
storage.removeItem(key);
}
}
}
// 删除除了所给 key 值的缓存,参数格式:'key1|key2|key3'
function removeStoragesBut(keys, type) {
keys = keys.split('|');
var storage = window[type || 'localStorage'];
var len = storage.length;
var key;
// 如果不支持本地缓存,很可能是启用了『无痕模式』
if (!storage) {
alert('为了能享受更好的服务,请关闭浏览器的无痕模式!');
return;
}
// keys.forEach(function(key) {
// storage.removeItem(key);
// });
while (len) {
len--;
key = storage.key(len);
if (keys.indexOf(key) === -1) {
// console.log('del key: ', key);
storage.removeItem(key);
}
}
}
// 微信上调试弹出信息,正式版或非调试手机号不执行
function showDebug(d) {
if (ddb.dev_status === 'release' && ddb.debugMobile !== ddb.cookie('wx_mobile')) {
return;
}
// oAlert('Debug:\n' + JSON.stringify(d));
console.log('Debug: ', d);
}
// 支付成功显示提示信息
function payCallback(status, orderData, done, fail) {
// var isCharteredBus = location.pathname.indexOf('chartered_bus.html') !== -1; // 包车订单
var isTravel = +B.url.getParam('is_travel') || orderData.line_type == 4; // 周边游订单
// var isKuaiba = orderData.line_type == 7; // 快吧订单
var orderNumber = orderData.order_number;
// var jumpUrl = B.url.setParam('order_number', orderNumber, 'order_details.html');
// if (orderData.isCharteredBus) {
// jumpUrl = B.url.setParam('order_id', orderNumber, 'chartered_bus.html#page-order-details');
// }
// var jumpUrl = B.url.setObj('order_details.html', {
// order_number: orderNumber,
// pay_status: status,
// line_type: orderData.line_type
// });
var jumpUrl = '';
if (orderData.isCharteredBus) {
jumpUrl = B.url.setParam('order_id', orderNumber, 'chartered_bus.html');
var use_native_page = B.url.getParam("use_native_page");
if(use_native_page){
jumpUrl = B.url.setParam('use_native_page',use_native_page,jumpUrl);
}
} else {
jumpUrl = B.url.setParam('order_number', orderNumber, 'order_details.html');
}
jumpUrl = B.url.setObj(jumpUrl, {
pay_status: status,
line_type: orderData.line_type
});
if (isTravel) {
jumpUrl = B.url.setParam('is_travel', 1, jumpUrl + '#page-per');
}
// 如果没有提供回调则赋值空函数...
done = done || ddb.noop;
fail = fail || done;
switch (status) {
case 'ok': // 支付成功
setTimeout(payOk, 1500); // 延迟 0.5 秒请求,避免状态不同步
return;
case 'cancel': // 取消
case 'fail':
payFail();
return;
}
// 支付成功调用
function payOk() {
var url = 'order/pay_confirm';
var postData = {
order_number: orderNumber,
dada_flag: 1
};
// 包车订单
if (orderData.isCharteredBus) {
url = 'chartered/pay_confirm';
postData = {
auth:ddb.pgps("chartered_bus_payEndAuth") || 0,
order_id: orderNumber
};
// postData = {order_id: orderNumber,
// payment_id:orderData.pay_order_info.payment_id
// };
}
ddb.get(url, postData, function(d) {
if (+d.ret !== 0) {
alert(d.msg);
return;
}
// 订单支付状态
switch (d.data.status) {
case 'success': // 订单支付确认成功
onSuccess(d.data);
return;
case 'error invalid_order_number':
alert('订单号错误');
break;
case 'order_unpaid':
alert('订单未支付');
break;
case 'order_has_been_canceled':
alert('订单已取消');
break;
case 'failed':
alert('其他错误');
break;
}
// 订单支付确认失败
jumpUrl = B.url.setParam('pay_status', 'fail', jumpUrl);
payFail();
// 支付成功状态回调
function onSuccess(data) {
// 缓存奖励数据
if (!ddb.store('isAward')) {
ddb.pgps('award', $.extend(ddb.pgps('award') || {}, {
'show_award': data.show_award,
'award_title': data.award_title,
'award_msg': data.award_msg
}));
ddb.store('isAward', 1);
}
// 缓存活动信息
ddb.pgps('activeInfo', {
show_active: data.show_active, // 1-显示 0-不显示
active_title: data.active_title,
share_type: data.share_type // 分享类型: 3-邀请有礼 5-订单支付分享红包
});
// 清除首页推荐线路缓存
if (!orderData.isCharteredBus) {
ddb.removeStoragesByKeyContains('intercity/get_recommend_set?line_type=');
ddb.pgps('line/get_member_recommend_lines',null);
}
done(orderNumber);
// 包车订单,在回调里弹框,然后转到订单详情页
// if (orderData.isCharteredBus) {
// return;
// }
// 非包车订单跳到支付成功页
if (!orderData.isCharteredBus) {
jumpUrl = ddb.fitEnv(data.success_url) || jumpUrl;
}
location.href = jumpUrl;
}
});
}
// 支付失败调用
function payFail() {
fail(orderNumber);
// 包车订单,在回调里弹框,然后转到订单详情页
if (orderData.isCharteredBus) {
location = '#page-order-details';
return;
}
location.href = jumpUrl;
}
}
function payOrder(orderData, done, fail) {
if (!orderData.order_number) {
alert('订单号无效 T_T');
return;
}
var url = '/app/weixinOerderPay/';
var orderNumber = orderData.order_number;
// var isCharteredBus = location.pathname.indexOf('chartered_bus.html') !== -1; // 包车订单
// var isTravel = +B.url.getParam('is_travel') || orderData.line_type == 4; // 周边游订单
// 如果没有提供回调则赋值空函数...
done = done || ddb.noop;
fail = fail || done;
// 根据支付方式调取支付
switch (+orderData.pay_type) {
case 1: // 微信支付
setTimeout(wxPay, 1500);
break;
case 2: // 支付宝支付
appPay(2);
break;
case 4: // 支付宝网页支付
aliWebPay();
break;
case 8: // 分期乐支付
// 用 cookie 传参到订单详情页-分期乐支付回调不能带参数
ddb.cookie('fqlpay_order_number', orderNumber, {expires: 1});
location = orderData.pay_order_info.fenqile_url;
break;
}
// app 微信/支付宝支付
function appPay(type) {
if (type === 1) { // 微信支付
orderData.payChannel = 'wxpay';
orderData.payInfo = orderData.pay_order_info.wx_prepay_id;
} else if (type === 2) { // 支付宝支付
orderData.payChannel = 'alipay';
orderData.payInfo = orderData.pay_order_info.alipay_params;
}
// 调用 app 支付接口
// ddb.app.pay(orderData.payChannel, orderData.payInfo);
ddb.appCall('pay', orderData.payChannel, orderData.payInfo);
ddb.Popup.confirm({
title: '支付提醒',
content: '是否已经完成支付',
cancelText: '遇到问题',
okText: '完成支付',
okCall: function() {
payCallback('ok', orderData, done, fail);
},
cancelCall: function() {
payCallback('fail', orderData, done, fail);
}
});
}
// 调起微信支付
function wxPay() {
if (ddb.isWeixin) { // 微信中使用微信支付(正式公众号)
// 如果在非正式公众号域名下支付,给予提示
if (ddb.dev_status !== 'release') {
alert('测试公众号不支持微信支付');
return;
}
// 接口有返回支付包
if (orderData.pay_order_info && orderData.pay_order_info.wx_params) {
var payPackage = orderData.pay_order_info.wx_params;
// oAlert(JSON.stringify(payPackage));
payPackage = {
"appId": payPackage.appid,
"timeStamp": payPackage.time_stamp.toString(),
"nonceStr": payPackage.nonce_str,
"package": "prepay_id=" + payPackage.prepay_id,
"signType": payPackage.sign_type,
"paySign": payPackage.sign
};
//oAlert(JSON.stringify(payPackage));
WeixinJSBridge.invoke('getBrandWCPayRequest', payPackage, function(res) {
// oAlert(res.err_msg);
if (res.err_msg === 'get_brand_wcpay_request:ok') { // 支付成功
payCallback('ok', orderData, done, fail);
} else if (res.err_msg === 'get_brand_wcpay_request:cancel') { // 取消支付
payCallback('cancel', orderData, done, fail);
} else { // 支付失败
//oAlert(JSON.stringify(res));
payCallback('fail', orderData, done, fail);
}
});
return;
}
// 接口未返回支付包,从微信服务器获取
orderData.urlType = 'app';
ddb.get(url, orderData, function(d) {
if (+d.ret === 0) {
WeixinJSBridge.invoke('getBrandWCPayRequest', d.msg, function(res) {
// oAlert(res.err_msg);
if (res.err_msg === 'get_brand_wcpay_request:ok') { // 支付成功
payCallback('ok', orderData, done, fail);
} else if (res.err_msg === 'get_brand_wcpay_request:cancel') { // 取消支付
payCallback('cancel', orderData, done, fail);
} else { // 支付失败
payCallback('fail', orderData, done, fail);
}
});
} else {
alert('获取微信支付包失败:' + d.msg);
// ddb.debug(d);
}
});
} else if (ddb.isApp) { // 调用 app 支付
orderData.payChannel = 'wxpay';
orderData.payInfo = orderData.pay_order_info.wx_prepay_id;
appPay(1);
}
}
// 支付宝网页支付
function aliWebPay() {
url = 'order/h5_alipay';
var webappPath = 'http://' + ddb.host + '/webapp/';
var payData = {
order_number: orderNumber,
return_url: webappPath + 'pay_success.html?pay_type=aliwebpay&order_number=' + orderNumber
};
// 如果是包车订单
if (orderData.isCharteredBus) {
url = 'chartered/h5_alipay';
payData = {
order_id: orderNumber,
return_url: webappPath + 'chartered_bus.html?pay_type=aliwebpay&order_id=' + orderNumber,
//return_url: payData.return_url + '&order_id=' + orderNumber,
total_amount: orderData.real_price // 单位为分
};
// url = 'chartered/pay_order';
// payData = {
// order_id: orderNumber,
// return_url: webappPath + 'chartered_bus.html?pay_type=aliwebpay&order_id=' + orderNumber +'#page-order-details',
// pay_stage:orderData.pay_stage,
// pay_type:orderData.pay_type,
// total_amount: orderData.real_price // 单位为分
// };
// 已有支付页数据
// if (orderData.isPayOrder && orderData.alipay_html) {
// $(orderData.alipay_html).hide().appendTo('body');
// return;
// }
}
ddb.get(url, payData, function(d) {
if (+d.ret !== 0) {
alert(d.msg);
return;
}
// 支付宝网页支付的回调在这里执行,包车因为要弹窗不执行回调
// if (!orderData.isCharteredBus) {
done(orderNumber);
// }
$(d.data.alipay_html).hide().appendTo('body');
});
}
}
function Msg(s) {
// return ddb.Popup.msg(s);
return ddb.Toast.show(s);
}
// 跑马灯函数
function marqueeLine(target, type) {
var obj = $('.' + target);
$.each(obj, function(i, ele) {
$(ele).removeClass('m-marquee');
var html = $(ele).html();
var dataHtml = $(ele).data("html");
if (!type) {
type = 'default';
}
if (dataHtml && type.indexOf('change') === -1) {
html = dataHtml;
}
$(ele).html("<span>" + html + "</span>");
var curr_w = $(ele).width() - parseFloat($(ele).css('padding-left'));
var real_w = $(ele).find('span').width();
if (real_w > curr_w) {
$(ele).data("html", html);
$(ele).html("<p><label><span>" + html + "</span><span>" + html + "</span></label></p>");
$(ele).addClass("m-marquee");
var pd_right = parseFloat($(ele).find('span').css('padding-right'));
var lbl = $(ele).find('label');
lbl.width(2 * (real_w + pd_right));
if (type.indexOf('auto') !== -1) {
var speed = 3 * Math.floor(real_w / curr_w) + 7;
if (speed > 20) {
speed = 20;
}
lbl[0].style.cssText += "-webkit-animation: marquee " + speed + "s linear 1.5s infinite;";
lbl[0].style.cssText += "animation: marquee " + speed + "s linear 1.5s infinite;";
}
} else {
$(ele).html(html);
}
});
}
// hack: iOS 微信无法修改标题
function setTitle(title) {
document.title = title;
if ($.os.ios) {
var $iframe = $('<iframe src="/favicon.ico" style="display:none;"></iframe>').on('load', function() {
setTimeout(function() {
$iframe.off('load').remove();
}, 0);
}).appendTo('body');
}
}
ddb.jump = jump; // 只能用于业务页面跳转,容易误用不推荐使用
ddb.ajax = ddbAjax;
ddb.get = DdbGet;
ddb.post = DdbPost;
ddb.upload = upload;
ddb.getJsonp = DdbGetJsonp;
ddb.store = store;
ddb.pgps = session;
ddb.session = session;
ddb.removeStoragesByKeyContains = removeStoragesByKeyContains;
ddb.removeStoragesBut = removeStoragesBut;
ddb.cookie = Cookie;
ddb.payOrder = payOrder;
ddb.debug = showDebug;
ddb.msg = Msg;
ddb.payCallback = payCallback;
ddb.getOpenId = getOpenId;
ddb.marqueeLine = marqueeLine;
ddb.setTitle = setTitle;
// hack: iOS QQ 浏览器 sessionStorage 不能跨页面访问
if ($.os.ios && /MQQBrowser/i.test(navigator.userAgent)) {
ddb.session = ddb.pgps = ddb.store;
}
// 获取微信用户信息(可以得到未关注本微信号的人的基本信息)
ddb.getWxUserInfo = function(redirectUri, scope, appid) {
redirectUri = (redirectUri || location.href).replace(/\/\/\w+\.wechat/, '//wechat');
// 应用授权作用域:snsapi_base 不弹出授权页面,直接跳转,只能获取用户 openid;
// snsapi_userinfo 弹出授权页面,可通过 openid 拿到昵称、性别、所在地,并且即使在未关注的情况下,只要用户授权,也能获取其信息
scope = scope === 'userinfo' ? 'snsapi_userinfo' : 'snsapi_base';
appid = appid || 'wx72a2b17c7ed41fe8';
var url = [
'https://open.weixin.qq.com/connect/oauth2/authorize?',
'appid=' + appid,
'&redirect_uri=' + encodeURIComponent(redirectUri),
'&response_type=' + 'code',
'&scope=' + scope,
'#wechat_redirect'
].join('');
location = url;
};
// 清除 XHR 对象
ddb.abortXHRs = function() {
// var xhrs = ddb.xhrs.splice(0, ddb.xhrs.length);
ddb.xhrs.forEach(function(xhr) {
xhr.abort();
console.log('Abort XHR: ', xhr);
});
ddb.xhrs = [];
};
// 添加微信分享提示弹层
ddb.showShareit = function() {
if (!ddb.isWeixin) {
alert('请在嗒嗒巴士公众号中分享');
// ddb.wx.gotoPublic();
return;
}
var shareit = document.getElementById('shareit');
if (!shareit) {
$('<div id="shareit"><p>点击右上角分享</p></div>').appendTo('body')
.on('click', function(e) {
this.style.display = 'none';
});
} else {
shareit.style.display = 'block';
}
};
// 获取页面自定义跳转项
ddb.getPageLink = function(opt) {
var postData = {
item_type: opt.item_type || 1,
line_code: opt.line_code,
noLoading: true
};
if (opt.startDate) {
postData.start_date = opt.start_date;
}
ddb.get('line/get_line_config', postData, function(d) {
if (+d.ret === 0) {
// 当有1个项目时,靠左显示,最长不超过18个字数;
// 当有2个项目时,当有一个字数超过8-15个字的时候,两端顶部对齐;当字数都小于8个的时候,从左向右依次排开;
// 当有3个项目时,两端对齐,平均分布,最长不超过8个字数;
// 最多3项
var link = {};
link.type = {};
link.list = d.data.item_list.slice(0, 3).map(function(item, i, arr) {
var str = item.title;
var length = 18;
var truncation = '...';
switch (arr.length) {
case 1:
item.title = str.length > length ? str.slice(0, length) + truncation : str;
break;
case 2:
length = 16; // 15=>16暂时兼容“联系电话:12345678902”这种情况
item.title = str.length > length ? str.slice(0, length) + truncation : str;
break;
case 3:
length = 8;
item.title = str.length > length ? str.slice(0, length) + truncation : str;
break;
}
return item;
});
// 当有2个项目时,当字数都小于8个的时候
if (link.list.length === 2 && link.list.every(less8)) {
link.type.less8 = true;
}
opt.callback(link);
} else {
alert(d.msg);
}
function less8(item) {
return item.title.length < 8;
}
});
};
// 设备信息
ddb.device = (function() {
var dpr = window.devicePixelRatio || 1;
// 如果物理像素与实际像素相等说明返回的值可能有误(比如某些三星手机)
if (screen.width === document.documentElement.clientWidth) {
return {
width: screen.width * dpr,
height: screen.height * dpr,
dpr: dpr
};
}
return {
width: screen.width,
height: screen.height,
dpr: dpr
};
})();
// 接口通用参数
ddb.common = {
version: ddb.version,
user_id: '0', // 用户 ID,未登录为 0
login_type: 1, // 乘客端
device_type: 3, // 设备类型:1-安卓,2-IOS,3-WEB
// mobile: '', // 用户绑定的手机号,未登录为空字符串
// device_id: '', // 设备 ID
// ddb_token: '', // 有 ddb_token 就不传 login_token
// login_token: '', // 登录令牌信息,用于 WEB 端的登录校验
// ddb_src_id: '',
// lat: 1, // 用户当前纬度
// lng: 1, // 用户当前经度
// page_size: 6, // 当前页大小
// page_index: 1, // 当前页码
screen: ddb.device.width + ':' + ddb.device.height + '|' + ddb.device.dpr, // 用户设备信息
source: ddb.isWeixin ? 3 : 5 // 请求来源:1-安卓,2-IOS,3-微信,4-快捷购票,5-webapp
};
// 获取并缓存渠道号
var ddbSrcId = B.url.getParam('ddb_src_id');
if (ddbSrcId) {
ddb.session('ddb_src_id', ddbSrcId);
}
// 初始化通用参数
initCommon();
})();
// 是否在某路径下,参数为单个或多个路径名,如:'public|volunteer'
// ddb.inPublic = location.pathname.indexOf('/public/') !== -1;
ddb.inPath = function(pathname) {
return new RegExp('/(' + pathname + ')/', 'i').test(location.pathname);
};
ddb.fileName = location.pathname.slice(location.pathname.lastIndexOf('/') + 1);
// 微信相关接口
ddb.wx = {};
// 是否设置分享
// ddb.wx.noShare = ddb.inPath('public|volunteer');
// 获取微信 JSSDK_CFG、openid
ddb.wx.getInfo = function(url, callback) {
if (!ddb.isWeixin) {
return;
}
// 如果未提供 url 参数
if (typeof url === 'function') {
callback = url;
url = location.href.split('#')[0];
}
ddb.get(ddb.wxapi + 'wechat_api/jssdk', {
urlType: 'app',
wxUrl: url,
noLoading: true
}, function(d) {
if (0 !== +d.ret) {
// alert(d.msg);
return;
}
ddb.JSSDK_CFG = d.JSSDK_CFG; // 缓存 JSSDK
ddb.openid = d.JSSDK_CFG.open_id; // 缓存 openid
// 回调函数
if (callback) {
callback(d.JSSDK_CFG);
}
});
};
// 设置微信分享
ddb.wx.shareConfig = {
title: '嗒嗒巴士送你上下班',
desc: '上下班坐公交是玩命,坐专车是烧钱,坐嗒嗒巴士走心。',
link: location.href,
imgUrl: 'http://' + ddb.host + '/webapp/image/side_avatar_default.png',
timeline: { // 分享到朋友圈
imgUrl: 'http://' + ddb.host + '/webapp/image/side_avatar_default_memory.png'
},
appMessage: {}, // 发送给朋友
QQ: {}, // 分享到 QQ
QZone: {} // 分享到 QQ 空间
};
// 配置微信接口
ddb.wx.setConfig = function (cfg, debug) {
if (ddb.wx.hasConfig) {
return;
}
wx.config($.extend({
debug: debug || false,
appId: cfg.msg.appId,
timestamp: cfg.msg.timestamp,
nonceStr: cfg.msg.nonceStr,
signature: cfg.msg.signature,
jsApiList: [
'onMenuShareTimeline',
'onMenuShareAppMessage',
'onMenuShareQQ',
'onMenuShareQZone',
'chooseImage',
'previewImage',
'openLocation',
'getLocation',
'hideMenuItems',
'showMenuItems',
'closeWindow',
'getNetworkType'
]
}, cfg.config || {}));
ddb.wx.hasConfig = true;
};
ddb.wx.share = function (cfg, debug) {
// 只在微信中才执行分享
if (!ddb.isWeixin || !window.wx) {
return;
}
// 控制被分享页某些按钮的显示
var isShare = cfg.isShare || B.url.getParam('share');
if (1 == isShare) {
$('nav button').addClass('showNone').filter('.publicNum').removeClass('showNone');
}
// 如果调用时没指定配置,则从缓存中读取
cfg.JSSDK_CFG = cfg.JSSDK_CFG || ddb.JSSDK_CFG;
// 分享没设置完成前先隐藏分享菜单项
ddb.wx.hideShareMenu(cfg.JSSDK_CFG);
if (cfg.url) {
ddb.wx.getInfo(cfg.url, wxShare);
} else if (cfg.JSSDK_CFG) {
wxShare(cfg.JSSDK_CFG);
} else {
ddb.wx.getInfo(wxShare);
}
// 微信分享
function wxShare(JSSDK_CFG) {
ddb.wx.shared = true;
ddb.wx.setConfig(JSSDK_CFG, debug);
wx.ready(function() {
var JSSDK_Share = $.extend({}, ddb.wx.shareConfig, cfg.JSSDK_Share);
var shareCfg = {
title: JSSDK_Share.title,
desc: JSSDK_Share.desc,
link: JSSDK_Share.link,
imgUrl: JSSDK_Share.imgUrl
};
shareCfg.success = function(res) {
// oAlert(JSON.stringify(res));
// 隐藏分享提示
if (document.getElementById('shareit')) {
$('#shareit').hide();
}
// 上报分享统计
// oAlert('wxshare.' + cfg.mtaid + '.' + res.errMsg.replace(':ok', ''));
if (window.MtaH5 && cfg.mtaid) {
MtaH5.clickStat('wxshare.' + cfg.mtaid + '.' + res.errMsg.replace(':ok', ''));
}
};
// 分享到朋友圈
wx.onMenuShareTimeline($.extend([], shareCfg, JSSDK_Share.timeline));
// 分享给朋友
wx.onMenuShareAppMessage($.extend([], shareCfg, JSSDK_Share.appMessage));
// 分享到 QQ
wx.onMenuShareQQ($.extend([], shareCfg, JSSDK_Share.QQ));
// 分享到 QQ 空间
wx.onMenuShareQZone($.extend([], shareCfg, JSSDK_Share.QZone));
// 分享设置后显示分享菜单
var menus = [
'menuItem:share:appMessage',
'menuItem:share:timeline',
'menuItem:share:qq',
'menuItem:share:QZone'
];
// 设置分享渠道:1-微信好友;2-微信朋友圈;3-QQ;4-QQ空间
if (JSSDK_Share.channels) {
menus = JSSDK_Share.channels.split(',').map(function(item) {
return menus[item - 1];
});
}
// oAlert(JSON.stringify(menus));
ddb.wx.showShareMenu(JSSDK_CFG, menus);
setTimeout(function() {
ddb.wx.showShareMenu(JSSDK_CFG, menus);
}, 1000);
// ddb.wx.showShareMenu();
});
// config 信息验证失败执行,具体错误信息可以在 res 参数中查看
// TODO: 对于 SPA 可以在这里更新签名。
wx.error(function(res) {
console.log(res);
});
}
};
// 隐藏微信分享菜单
ddb.wx.hideShareMenu = function(JSSDK_CFG, menus) {
// 只在微信中才执行分享
if (!ddb.isWeixin || !window.wx) {
return;
}
JSSDK_CFG = JSSDK_CFG || ddb.JSSDK_CFG;
if (JSSDK_CFG) {
hideShare(JSSDK_CFG);
} else {
ddb.wx.getInfo(hideShare);
}
function hideShare(JSSDK_CFG) {
// 微信接口配置
ddb.wx.setConfig(JSSDK_CFG);
// wx.config({
// debug: false,
// appId: JSSDK_CFG.msg.appId,
// timestamp: JSSDK_CFG.msg.timestamp,
// nonceStr: JSSDK_CFG.msg.nonceStr,
// signature: JSSDK_CFG.msg.signature,
// jsApiList: [
// 'onMenuShareTimeline',
// 'onMenuShareAppMessage',
// 'onMenuShareQQ',
// 'onMenuShareQZone',
// 'openLocation',
// 'getLocation',
// 'hideMenuItems',
// 'showMenuItems'
// ]
// });
wx.ready(function() {
menus = menus || [
'menuItem:share:appMessage',
'menuItem:share:timeline',
'menuItem:share:qq',
'menuItem:share:QZone'
];
wx.hideMenuItems({menuList: menus});
});
}
};
// 显示微信分享菜单
ddb.wx.showShareMenu = function(JSSDK_CFG, menus) {
// 只在微信中才执行分享
if (!ddb.isWeixin || !window.wx) {
return;
}
JSSDK_CFG = JSSDK_CFG || ddb.JSSDK_CFG;
if (JSSDK_CFG) {
showShare(JSSDK_CFG);
} else {
ddb.wx.getInfo(showShare);
}
function showShare(JSSDK_CFG) {
// 微信接口配置
ddb.wx.setConfig(JSSDK_CFG);
// wx.config({
// debug: false,
// appId: JSSDK_CFG.msg.appId,
// timestamp: JSSDK_CFG.msg.timestamp,
// nonceStr: JSSDK_CFG.msg.nonceStr,
// signature: JSSDK_CFG.msg.signature,
// jsApiList: [
// 'onMenuShareTimeline',
// 'onMenuShareAppMessage',
// 'onMenuShareQQ',
// 'onMenuShareQZone',
// 'openLocation',
// 'getLocation',
// 'hideMenuItems',
// 'showMenuItems'
// ]
// });
wx.ready(function() {
menus = menus || [
'menuItem:share:appMessage',
'menuItem:share:timeline',
'menuItem:share:qq',
'menuItem:share:QZone'
];
wx.showMenuItems({menuList: menus});
});
}
};
// 获取是否已关注公众号
ddb.wx.getFollowStatus = function(callback) {
if (!ddb.isWeixin) {
return;
}
if (ddb.JSSDK_CFG) {
getStatus(ddb.JSSDK_CFG);
} else {
ddb.wx.getInfo(getStatus);
}
function getStatus(JSSDK_CFG) {
ddb.get('/wechat_api/isSubscribe', {
urlType: 'app',
dataType: 'text',
openid: JSSDK_CFG.open_id,
notCheckLogin: true
}, function(status) {
var hasFollowed = parstatus !== '0';
callback(hasFollowed);
});
}
};
// 转到微信关注引导页
ddb.wx.gotoPublic = function() {
location.href = 'http://mp.weixin.qq.com/s?__biz=MzAxNDMzNjc2MQ==&mid=209057391&idx=1&sn=c3686736a269a755c2b3bbb69dcddf91&scene=1&key=1936e2bc22c2ceb5f0422d19def4dd7e2ead657bd6a2be972adadb5206e9105a41e4bcaeaabb99c6bb8a0a9c37a78489&ascene=1&uin=MTAzNDg1ODg4MQ%3D%3D&devicetype=Windows+8&version=61000721&pass_ticket=Koa33YxOOGuMY5d5XE%2BTNfpOefmOQ0oQUIO%2BVO0f9PbEwF0GPMj%2BeH1mkKvSd45M';
return false;
};
// jump 跳转
ddb.jumpCommonUrl = function(page) {
var url = 'http://' + ddb.sld + 'jump.buskeji.com/common/load?page=' + page;
url = B.url.setObj(url, {
version: ddb.version,
device_type: 3,
city_code: ddb.store('ddbCity') ? ddb.store('ddbCity').split('/')[1] : '0755'
});
window.location = url;
};
// 滚动到距离底100像素时执行回调
ddb.scrollRefresh = function(elem, callback) {
if (typeof elem === 'function') {
callback = elem;
elem = document.body;
}
var canScrollHeight = elem.scrollHeight - document.documentElement.clientHeight;
var scrollbarFromFooter = canScrollHeight - elem.scrollTop;
// console.log(canScrollHeight);
// console.log(elem.scrollTop);
// console.log(scrollbarFromFooter);
if (scrollbarFromFooter < 100) {
callback();
}
};
// 设置分享
ddb.setShare = function(config, callback) {
// 如果不在微信或 app 中不处理
if (!ddb.isWeixin && !ddb.isApp) {
return;
}
// ddb.wx.hideShareMenu();
ddb.wx.shared = true;
config.notCheckLogin = true;
config.noLoading = true;
// 未登录
// if (!B.user.isLogin()) {
// ddb.wx.share({
// mtaid: config.mtaid,
// JSSDK_Share: {
// title: '嗒嗒巴士送你上下班',
// desc: '上下班坐公交是玩命,坐专车是烧钱,坐嗒嗒巴士走心',
// link: location.href
// }
// });
// return;
// }
ddb.get('share/get_share_url', config, function(d) {
if (+d.ret === 0) {
var channels = d.data.share_channel_list.map(function(item) {
return item.share_channel_id;
});
var shareCfg = {
title: d.data.share_title,
desc: d.data.share_detail,
link: ddb.fitEnv(d.data.share_url),
channels: channels.join(',')
};
d.data.share_channel_list.forEach(function(item) {
var cfg = {};
if (item.share_title) {
cfg.title = item.share_title;
}
if (item.share_detail) {
cfg.desc = item.share_detail;
}
if (item.share_url) {
cfg.link = item.share_url;
}
if (item.share_icon) {
cfg.imgUrl = item.share_icon;
}
switch (+item.share_channel_id) {
case 1:
shareCfg.appMessage = cfg;
break;
case 2:
shareCfg.timeline = cfg;
break;
case 3:
shareCfg.QQ = cfg;
break;
case 4:
shareCfg.QZone = cfg;
break;
}
});
ddb.wx.share({
mtaid: config.mtaid,
JSSDK_Share: shareCfg
});
if (typeof callback === 'function') {
callback($.extend({
imgUrl: ddb.wx.shareConfig.imgUrl,
appCfg: JSON.stringify(d.data)
}, shareCfg));
}
}
});
};
// 公用 ui 组件
ddb.ui = {};
ddb.tl = {};
// ddb 价格统一显示函数,整数显示整数,小数显示一位小数
ddb.tl.fixPrice = function(price) {
if (typeof price === "undefined" || !price) {
return price;
}
var oNum = price.toString();
if (price == 0) {
return '0';
}
if (oNum.indexOf('.') == -1) {
return price;
}
var arr = oNum.split('.');
var arr_t = arr[1];
if (arr[0] == 0) {
arr[0] = 0;
}
if (arr_t.length >= 2) {
arr_t = arr_t.substr(0, 2);
}
for (var i = 0, len = arr_t.length; i < len; i++) {
if (arr_t.length > 0 && arr_t.charAt(arr_t.length - 1) == 0) {
arr_t = arr_t.slice(0, -1);
}
}
return arr_t.length > 0 ? arr[0] + '.' + arr_t : arr[0];
};
ddb.tl.loadContent = function(url,data,callback){
return $.ajax({
url : url,
dataType : 'html',
timeout : data.timeout || 15000,
cache:true,
data : data,
success : function(html){
callback && callback(html);
},error:function(e){
alert("网络异常!");
//console.log(e);
}
});
};
ddb.tl.loadCss = function(url){
$("<link>")
.attr({ rel: "stylesheet",
type: "text/css",
href: url
})
.appendTo("head");
};
// 深层对象拷贝, 返回拷贝后的对象, 剪断js对象引用链
ddb.tl.clone = function(obj) {
return JSON.parse(JSON.stringify(obj));
};
//公用弹出框
ddb.Popup = (function(){
var __timer,_popup,_mask,transition,clickMask2close,
POSITION = {
'center':{
top:'50%',
left:'.5rem',
right:'.5rem',
'border-radius' : '.2rem'
}
},
TEMPLATE = {
msg: '<div class="popup-content popup-msg {_class}">{content}</div>',
alert: '<div class="popup-title {_class}">{title}</div><div class="popup-content {_class}">{content}</div><div id="ddb_popup_btn_container"><a data-target="closePopup" data-icon="checkmark">{ok}</a></div>',
tips: '<div class="popup-tips-title">{title}</div><div class="popup-tips-content">{content}</div>',
confirm: '<div class="popup-title {_class}">{title}</div><div class="popup-content {_class}">{content}</div><div id="ddb_popup_btn_container"><a class="cancel" data-icon="close">{cancel}</a><a data-icon="checkmark">{ok}</a></div>',
intro: '<div class="popup-title {_class}">{title}</div><div class="popup-content {_class}">{content}</div><div id="ddb_popup_btn_container"><a class="ddb_popup_intro_ok" data-icon="checkmark">{ok}</a></div>',
loading: '<i class="icon spinner"></i>',
center: '<div class="popup_tips {_class}">{_img}<div class="popup_tips_title">{title}</div><div class="popup_tips_text1">{text1}</div><div class="popup_tips_text2">{text2}</div></div>'
};
/**
* 全局只有一个popup实例
* @private
*/
var _init = function(){
$('body').append('<div id="ddb_popup"></div><div id="ddb_popup_mask"></div>');
_mask = $('#ddb_popup_mask');
_popup = $('#ddb_popup');
_subscribeEvents();
};
/**
* loading组件
* @param text 文本,默认为“加载中...”
*/
var loading = {};
loading.show = function(text) {
var markup = TEMPLATE.loading;
show({
html: markup,
pos: 'loading',
opacity: 0.1,
animation: true,
clickMask2Close: false
});
};
loading.hide = function() {
hide();
};
var show = function(options,fn){
var settings = {
height : undefined,//高度
width : undefined,//宽度
opacity : 0.6,//透明度
html : '',//popup内容
pos : 'center',//位置 {@String top|top-second|center|bottom|bottom-second} {@object css样式}
clickMask2Close : true,// 是否点击外层遮罩关闭popup
showCloseBtn : true,// 是否显示关闭按钮
onShow : undefined //@event 在popup内容加载完毕,动画开始前触发
};
$.extend(settings,options);
clickMask2close = settings.clickMask2Close;
_mask.css('opacity',settings.opacity);
//rest position and class
_popup.attr({'style':'','class':''});
settings.width && _popup.width(settings.width);
settings.height && _popup.height(settings.height);
var pos_type = $.type(settings.pos);
if(pos_type == 'object'){// style
_popup.css(settings.pos);
}else if(pos_type == 'string'){
if(POSITION[settings.pos]){ //已经默认的样式
_popup.css(POSITION[settings.pos]);
var trans_key = settings.pos.indexOf('top')>-1?'top':(settings.pos.indexOf('bottom')>-1?'bottom':'defaultAnim');
}else{// pos 为 class
_popup.addClass(settings.pos);
}
}else{
console.error('错误的参数!');
return;
}
_mask.show();
var html;
if(settings.html){
html = settings.html;
}else if(settings.url){//远程加载
html = J.Page.loadContent(settings.url);
}else if(settings.tplId){//加载模板
html = template(settings.tplId, settings.tplData);
}
//是否显示关闭按钮
if(settings.showCloseBtn){
html += '<div id="tag_close_popup" data-target="closePopup" class="icon cancel-circle"></div>';
}
_popup.html(html).show();
//执行onShow事件,可以动态添加内容
settings.onShow && settings.onShow.call(_popup);
//显示获取容器高度,调整至垂直居中
if(settings.pos == 'center'){
var height = _popup.height();
_popup.css('margin-top', '-' + height / 2 + 'px');
}
fn&&fn();
};
/**
* 关闭弹出框
* @param noTransition 立即关闭,无动画
*/
var hide = function(noTransition){
_mask.hide();
_popup.hide().empty();
};
var _subscribeEvents = function(){
_mask.on('click',function(){
clickMask2close && hide();
});
_popup.on('click', '[data-target="closePopup"]', function() {
hide();
});
};
/**
* alert组件
* @param title 标题
* @param content 内容
*/
var alert = function(title,content,btnName){
var markup = TEMPLATE.alert.replace('{title}',title).replace('{content}',content).replace('{ok}',btnName || '确定');
show({
html : markup,
pos : 'center',
opacity : 0.6,
showCloseBtn : false
});
};
/**
* tip组件
* @param title 标题
* @param content 内容
*/
var tips = function(title,content,btnName){
var markup = TEMPLATE.tips.replace('{title}',title).replace('{content}',content);
show({
html : markup,
pos : 'center',
opacity : 0.6,
showCloseBtn : false
});
};
/**
* confirm 组件
* @param title 标题
* @param content 内容
* @param okCall 确定按钮handler
* @param cancelCall 取消按钮handler
*/
var confirm = function(className, title, content, cancelText, okText, okCall, cancelCall, clickMask2Close) {
if ($.isPlainObject(className)) {
var options = $.extend({
className: '',
title: '',
content: '',
okText: '',
cancelText: '',
clickMask2Close: true,
okCall: function() {},
cancelCall: function() {}
}, className);
clickMask2Close = options.clickMask2Close;
className = options.className;
title = options.title;
content = options.content;
cancelText = options.cancelText;
okText = options.okText;
okCall = options.okCall;
cancelCall = options.cancelCall;
} else {
cancelText = cancelText || '取消';
okText = okText || '确定';
}
show({
html: TEMPLATE.confirm.replace('{title}', title).replace('{content}', content).replace('{cancel}', cancelText).replace('{ok}', okText).replace(/{_class}/g, className),
pos: 'center',
opacity: 0.6,
showCloseBtn: false,
clickMask2Close: clickMask2Close
});
$('#ddb_popup_btn_container [data-icon="checkmark"]').on('click', function() {
okCall.call(this);
hide();
});
$('#ddb_popup_btn_container [data-icon="close"]').on('click', function() {
cancelCall.call(this);
hide();
});
};
/**
* intro 组件
* @param title 标题
* @param content 内容
* @param okCall 确定按钮handler
*/
var intro = function(className, title, content, okText, okCall, clickMask2Close) {
if ($.isPlainObject(className)) {
var options = $.extend({
className: '',
title: '',
content: '',
okText: '',
clickMask2Close: true,
okCall: function() {}
}, className);
clickMask2Close = options.clickMask2Close;
className = options.className;
title = options.title;
content = options.content;
okText = options.okText;
okCall = options.okCall;
} else {
okText = okText || '确定';
}
show({
html: TEMPLATE.intro.replace('{title}', title).replace('{content}', content).replace('{ok}', okText).replace(/{_class}/g, className),
pos: 'center',
opacity: 0.6,
showCloseBtn: false,
clickMask2Close: clickMask2Close
});
$('#ddb_popup_btn_container [data-icon="checkmark"]').on('click', function() {
okCall.call(this);
hide();
});
};
/**
* msg 组件 消息弹框, 3s后自动消失
* @param content 内容
*/
var msg = function(content){
if (__timer) {
clearTimeout(__timer);
}
var markup = TEMPLATE.msg.replace('{content}',content);
show({
html : markup,
pos : 'center',
opacity : 0.6,
showCloseBtn : false
});
//__timer = setTimeout(hide,3000);
};
var center = function(img, opt, html) {
if (typeof img !== 'string') {
html = opt;
opt = img;
img = '<img src="/webapp/image/icon_success.png">';
}
img = img || '';
opt = $.extend({
className: '',
title: '',
text1: '',
text2: '',
delay: 3000
}, opt || {});
html = html || TEMPLATE.center.replace('{_img}', img).replace('{title}', opt.title).replace('{text1}', opt.text1).replace('{text2}', opt.text2).replace('{_class}', opt.className);
show({
html: html,
pos: 'center',
opacity: 0, // 透明度
showCloseBtn: false
}, function() {
$('#ddb_popup').css('background', 'rgba(0, 0, 0, 0)').addClass(opt.className);
});
if (__timer) {
clearTimeout(__timer);
}
__timer = setTimeout(function() {
hide();
opt.callback && opt.callback();
}, opt.delay);
};
_init();
return {
loading: loading,
show: show,
close: hide,
alert: alert,
tips: tips,
msg: msg,
confirm: confirm,
intro: intro,
center: center
};
})();
/**
* 消息组件
*/
ddb.Toast = (function($){
var toast_type = 'toast',
_toast, timer,
//定义模板
TEMPLATE = {
toast : '<a href="#">{value}</a>',
success : '<a href="#"><i class="icon checkmark-circle"></i>{value}</a>',
error : '<a href="#"><i class="icon cancel-circle"></i>{value}</a></div>',
info : '<a href="#"><i class="icon info-2"></i>{value}</a>'
};
var _init = function(){
//全局只有一个实例
$('body').append('<div id="ddb_toast"></div>');
_toast = $('#ddb_toast');
_subscribeCloseTag();
};
/**
* 关闭消息提示
*/
var hide = function() {
_toast.hide();
_toast.empty();
};
/**
* 显示消息提示
* @param type 类型 toast|success|error|info 空格 ass name 可以实现自定义样式
* @param text 文字内容
* @param duration 持续时间 为0则不自动关闭,默认为3000ms
*/
var show = function(text,type,duration){
if(timer) clearTimeout(timer);
type = type || 'toast';
duration = duration || 3000;
var classname = type.split(/\s/);
toast_type = classname[0];
_toast.attr('class',type).html(TEMPLATE[toast_type].replace('{value}',text)).show();
if(duration !== 0){//为0 不自动关闭
timer = setTimeout(hide,duration);
}
};
var _subscribeCloseTag = function(){
_toast.on('click','[data-target="close"]',function(){
hide();
});
};
_init();
return {
show : show,
hide : hide
};
})($);
// 加载中动画
ddb.loading = (function() {
var loading = document.getElementById('ddb-loading') || $('<div id="ddb-loading"><i></i></div>').appendTo('body')[0];
return {
show: function(text) {
loading.style.display = 'block';
// 若带上text参数如ddb.loading.show('正在为您更换站点...') 加载接口时可以显示加载文案
if( $('#ddb-loading').html !== '<i></i>'){
$('#ddb-loading').html('<i></i>');
}
if ( text ){
$('#ddb-loading').html('<span><p><i></i>' + text + '</p></span>');
}
},
hide: function() {
loading.style.display = 'none';
}
};
})();
ddb.getChatTokenCallback = function(callback) {
var userid = ddb.cookie('wx_user_id');
var key = 'chat_token_' + userid;
var token = ddb.session(key);
if (!userid) {
return;
}
if (token) {
callback(token);
} else {
ddb.get('chat/get_rongcloud_token', function(d) {
if (+d.ret !== 0) {
alert(d.msg);
// history.back();
return;
}
// d.data.token = 'z/2t0IJnBZOMnLU6FSijaiueCZsiY+7I2r+QYUJmO9yhGCvu8+0H/OFeFEyKfgecaI8gKBkIlvOI3POWqG5EXw==';
if (!d.data.token) {
alert('token 值为空');
return;
}
console.log('get token: ', token);
// d.data.expire_time = +d.data.expire_time === 0 ? 9999 : d.data.expire_time;
// ddb.session(key, d.data.token, {expires: d.data.expire_time, path: '/'});
ddb.session(key, d.data.token);
callback(d.data.token);
});
}
};
// 黑色底 3 秒弹框
window.oAlert = window._alert = window.alert;
window.alert = ddb.Toast.show;
// 屏蔽调试方法
if (ddb.dev_status === 'release' && !B.url.getParam('debug')) {
window.onerror = console.log = console.error = console.debug = console.warn = console.info = ddb.noop;
}
// 根据 city code 获取城市名称-依赖城市列表数据
ddb.getCityByCode = function(code, citys) {
var city = '';
citys = citys || ddb.CITYS;
if (!citys) {
return city;
}
citys.some(function(item) {
if (item.code == code) {
city = item.city;
return true; // 找到后退出循环
}
});
return city;
};
// app 公用数据初始化
ddb.initApp = (function initApp() {
ddb.app = window.DDBApp || window.android;
// function css_load_check() {
// var div = document.createElement('div');
// document.body.appendChild(div);
// div.className = 'css_load_tester';
// if (div.offsetWidth == 3) {
// document.body.removeChild(div); // 销毁不需要的 div
// } else {
// //再次从dada服务器拉取 css
// ddb.tl.loadCss("http://wechat.buskeji.com/webapp/css/base.css?ts=" + Math.random());
// }
// }(); //立即执行
// 只在嗒嗒 app 中执行
if (ddb.isApp) {
// 添加 app 标识
document.documentElement.classList.add('ddbapp');
if (ddb.isIosApp) document.documentElement.classList.add('iosapp');
// 获取并缓存公用参数(ddb.app 未初始化就取路径中参数)
ddb.common = ddb.session('appCommon');
// if (!ddb.common && ddb.app) {
// if (!ddb.common) {
// 如果是未登录状态一直获取
if (!ddb.common || !B.user.isLogin()) {
var commonParams = ddb.app ? ddb.app.getCommonParams() : ddb.cookie('ddb_app_general') || location.search.substring(1);
// ddb.common = B.url.serializeArray(ddb.app.getCommonParams());
ddb.common = B.url.serializeArray(decodeURIComponent(commonParams));
// oAlert('测试 APP 通用数据:' + JSON.stringify(ddb.common));
ddb.cookie('wx_mobile', (ddb.common.mobile || ''), {path: '/'});
ddb.cookie('wx_user_id', (ddb.common.user_id || ''), {path: '/'});
ddb.cookie('wx_device_id', (ddb.common.device_id || ''), {path: '/'});
ddb.cookie('wx_ddb_token', (ddb.common.ddb_token || ''), {path: '/'});
ddb.session('appCommon', ddb.common); // 缓存公用参数
ddb.session('ddb_src_id', ddb.common.ddb_src_id || '');
ddb.store('ddbCity', ddb.getCityByCode(ddb.common.city_code) + '/' + ddb.common.city_code); // 缓存用户城市信息
// if (ddb.isApp) {
// oAlert('cookie: ' + decodeURIComponent(ddb.cookie('ddb_app_general')));
// oAlert('commonParams: ' + decodeURIComponent(commonParams));
// oAlert('screen: ' + ddb.common.screen);
// oAlert('device: ' + ddb.common.device_model);
// }
}
}
return initApp;
})();
// ios APP 方法准备完成函数
ddb.appready = (function() {
var doc = window.document;
var loaded = !!window.DDBApp;
var fns = [], fn;
var id = setInterval(function() {
if (window.DDBApp) {
clearInterval(id);
flush();
}
}, 50);
doc.addEventListener('DDBAppReady', fn = function() {
doc.removeEventListener('DDBAppReady', fn);
flush();
});
function flush(f) {
loaded = 1;
while (f = fns.shift()) {
f();
}
}
return function(fn) {
if (ddb.isApp) {
loaded ? fn() : fns.push(fn);
}
};
}());
// ios APP 方法准备完成后初始化其方法和通用数据
// if (ddb.isIosApp) {
if (ddb.isApp) {
// app 方法准备完成后执行
ddb.appready(function() {
ddb.app = window.DDBApp;
// if ($.isEmptyObject(ddb.common)) {
if (!ddb.session('appCommon')) {
ddb.initApp();
}
});
}
// APP 方法调用函数(IOS APP 方法会在其准备好后执行)
ddb.appCall = function() {
if (!ddb.isApp) {
return;
}
var fnName = arguments[0];
var args = [].slice.call(arguments, 1);
ddb.appready(function() {
// ddb.app[arguments[0]].apply(ddb.app, [].slice.call(arguments, 1));
// args.length ? ddb.app[fnName].apply(ddb.app, args) : ddb.app[fnName]();
// ddb.app[fnName].apply(ddb.app, args);
if (ddb.app[fnName]) {
args.length ? ddb.app[fnName].apply(ddb.app, args) : ddb.app[fnName]();
}
});
};
// 微信分享设置:默认隐藏分享菜单,分享后会自动显示
// 为避免覆盖特定分享,页面加载完成才设置默认分享
ddb.wx.hideShareMenu();
$(window).on('load', function() {
// 特定目录或已设置过分享
if (ddb.inPath('public|volunteer|chat') || ddb.wx.shared) {
return;
}
ddb.wx.share({
JSSDK_Share: {
title: '一人一座舒适直达,嗒嗒巴士送你上下班',
desc: '上下班坐公交是玩命,坐专车是烧钱,坐嗒嗒巴士走心。',
link: 'http://a.app.qq.com/o/simple.jsp?pkgname=com.newdadabus'
}
});
});
// 西部公汽公众号
(function() {
// 判断是否是西部公汽公众号
ddb.isWesternBus = ddb.session('ddb_src_id') === 'western_bus';
// 缓存线路 ID
if (ddb.isWesternBus) {
var lines = B.url.getParam('western_bus_lines');
if (lines) {
var lineCodes = lines.split(',');
var lineIds = lineCodes.map(function(item) {
return item.split('-')[0];
});
ddb.session('western_bus_line_ids', lineIds);
}
}
// 判断是否是西部公汽线路
ddb.isWesternBusLine = function(id) {
if (!ddb.isWesternBus) {
return false;
}
var westernBusLineIds = ddb.session('western_bus_line_ids');
if (westernBusLineIds) {
id = String(id).split('-')[0];
return westernBusLineIds.indexOf(id) !== -1;
}
return false;
};
})();
// 腾讯云分析
// if (ddb.dev_status === 'dev') {
if (ddb.dev_status === 'release') {
// $('head').append('<script src="http://pingjs.qq.com/h5/stats.js" name="MTAH5" sid="500005024" cid="500005030"><\/script>');
(function() {
var mta = document.createElement('script');
mta.src = 'http://pingjs.qq.com/h5/stats.js';
mta.setAttribute('name', 'MTAH5');
mta.setAttribute('sid', '500005024');
mta.setAttribute('cid', '500005030');
document.head.appendChild(mta);
// document.body.appendChild(mta);
})();
// 按钮点击统计上报
$(document).on('click', '[data-mtaid]', function() {
if (!window.MtaH5) {
$(document).off('click', '[data-mtaid]');
return;
}
var name = $.trim($(this).data('mtaid').toLowerCase());
// name = name.replace(/\s+/g, ' ');
// var ddbSrcId = ddb.session('ddb_src_id');
// if (ddbSrcId) {
// name += '.ddb_src_id_' + ddbSrcId;
// }
// console.log(name);
if (name.indexOf(' ')) {
name.split(' ').forEach(function(item) {
// console.log(item);
MtaH5.clickStat(item);
});
} else if (name) {
MtaH5.clickStat(name);
}
});
}
// 搜狗 APP 本地生活
if (ddb.session('ddb_src_id') === '2128') {
document.documentElement.classList.add('sogou-app');
(function() {
var script = document.createElement('script');
script.src = 'http://fuwu.wap.sogou.com/static/partner.js';
script.setAttribute('sogouid', '085');
document.head.appendChild(script);
// document.body.appendChild(script);
})();
}
// 文档加载完时执行通用代码
// $(function() {
document.addEventListener('DOMContentLoaded', function() {
// avalon.ready(function() {
var docEl = document.documentElement;
// 页面加载完成后关闭动画
var loadcover = document.getElementById('loadcover');
if (loadcover) {
ddb.hideLoadcover = function() {
setTimeout(function() {
loadcover.className = 'hide-loadcover';
}, 300);
setTimeout(function() {
loadcover.parentNode.removeChild(loadcover);
}, 600);
};
// 设置 data-hide 属性为 none 不自动隐藏加载动画
// 须主动调用 ddb.hideLoadcover() 隐藏动画
if (loadcover.getAttribute('data-hide') !== 'none') {
ddb.hideLoadcover();
}
}
// 导航栏返回按钮
var $navBack = $('button.newBack, .g-navbar .back');
$navBack.on('click', function() {
// !document.referrer ? window.location = 'mine.html' : window.history.go(-1);
window.history.go(-1);
// if (!document.referrer) {
// window.location = 'mine.html';
// } else {
// window.history.go(-1);
// }
});
// 标识文档页有索引文档
$('html.doc').find('article dd:has(i)').addClass('has-index');
// 从微信推送消息等链接过来或在 app 中时,不显示导航栏的回退按钮等
if (B.url.getParam('from') === 'tplMsg' || ddb.isApp) {
$navBack.not('.forced-show').hide();
}
// tel、mailto 链接协议会导致安卓 app 直接挂掉,所以暂时去除(已修复)
// if (ddb.isApp && $.os.android) {
// $('[href^="tel:"], [href^="mailto:"]').attr('href', 'javascript:;');
// // $('[href^="tel:"], [href^="mailto:"]').removeAttr('href');
// }
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment