UNPKG

jdjm

Version:

金融移动端 - jm

636 lines (600 loc) 23.7 kB
///<jscompress sourcefile="jm.js" /> /** * @Author: Created By McChen * @Date: 2016/5/24 * @Mail: chenjiahao@jd.com * @Version: V0.0.0 */ var jm = (function () { /**============================ private ==============================*/ function pageLockHandler(e) { e.preventDefault(); } Function.prototype.before = function (fn) { var self = this; return function () { fn.apply(this, arguments); return self.apply(this, arguments); }; }; Function.prototype.after = function (fn) { var self = this; return function () { var ret = self.apply(this, arguments); // return Msg fn.apply(this, arguments); return ret; }; }; /**============================ public ==============================*/ return { version: "0.0.0", timestamp: "2016/05/24", /**======================= 方法按阿拉伯字母顺序排序 =======================**/ /** * @function object animate by transition * @param {Object} obj,DOM对象 * @param {String} target,transform属性 * @param {Number} time,动画周期 * @param {String} type,默认为ease-out(选填) * @return {Object} obj,DOM对象 */ animate: function (obj, target, time, type) { obj.css({ "transition": time + "s", "-webkit-transition": time + "s", "transform": target, "-webkit-transform": target, "transition-timing-function": type || "ease-out", "-webkit-transition-timing-function": type || "ease-out" }); return obj; }, /** * @function send a ajax request * @param {Object} config 配置对象(必填) * @attr {String} url,请求地址(必填) * @attr {Json} data,默认为空对象(选填) * @attr {String} type,默认为get(选填) * @attr {String} dataType,默认为json(选填) * @return {function} callback,成功回调(必填) * @return {function} failFn,失败回调(选填,建议填) */ ajax: function (config) { $.ajax({ url: config.url, data: config.data || {}, type: config.type || "get", dataType: config.dataType || "json", success: function (data) { config.callback && config.callback(data); }, error: function () { config.failFn && config.failFn(); } }) }, /** * @function create a div * @param {String} className * @param {String} innerHTML * @return {Object} DOM */ createDiv: function (className, innerHTML) { var oDiv = document.createElement("div"); oDiv.className = className; if (innerHTML) { oDiv.innerHTML = innerHTML } document.body.appendChild(oDiv); return oDiv; }, /** * @function template html module * @param {String} str, html template * @argument {Json} data, fill data * @return {String} formatStr 填充数据后html template */ format: function (str) { var pattern = /\{([\w\-_]+)\}/gm; var arr = Array.prototype.slice.call(arguments, 1); var args = /\{(\d+)\}/.test(str) ? arr : arr[0]; var formatStr = str.replace(pattern, function () { return args[arguments[1]]; }); return formatStr; }, /** * @function format the date * @param {Number} time(时间戳) * @param {String} format(格式)Eg: 'yyyy-MM-dd HH:mm:ss' */ formatTime: function (time, format) { var t = new Date(time); var tf = function (i) { return ( i < 10 ? '0' : '') + i }; return format.replace(/yyyy|MM|dd|HH|mm|ss/g, function (a) { switch (a) { case 'yyyy': return tf(t.getFullYear()); break; case 'MM': return tf(t.getMonth() + 1); break; case 'mm': return tf(t.getMinutes()); break; case 'dd': return tf(t.getDate()); break; case 'HH': return tf(t.getHours()); break; case 'ss': return tf(t.getSeconds()); break; } }) }, /** * @function get systemType and appType * @return {Object} * @use {Object}.{type}.{param} = {Boolean} * @type systemType/appType * @params isIos/inWx/inApp/inJdApp/inJrApp/inWyApp */ getBrowserInfo: function () { var ua = navigator.userAgent.toLowerCase(); var isIos = ua.indexOf('ipad') > -1 || ua.indexOf('iphone') > -1 || false; var mqq = ua.indexOf("_sq_") > -1 || false; var wx = ua.indexOf('micromessenger') > -1 || false; var jdApp = ua.indexOf('jdapp') > -1 || false; var jrApp = ua.indexOf('jdjr') > -1 || ua.indexOf('android-async-http') > -1 || false; var wyApp = ua.indexOf('walletclient') > -1 || false; var jdStock = ua.indexOf("jdstock") > -1 || false; var systemType = { iOS: isIos, Android: !isIos }; var appType = { mqq: mqq, wx: wx, jdApp: jdApp, jrApp: jrApp, wyApp: wyApp, jdStock: jdStock }; return { systemType: systemType, appType: appType }; }, /** * @function get cookie by name * @return {String} * @param {String} name */ getCookie: function (name) { var nameEQ = name + "="; var ca = document.cookie.split(";"); for (var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) == " ") c = c.substring(1, c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length); } return null; }, /** * @function get the value of url string * @param {String} name */ getUrlString: function (name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); var r = window.location.search.substr(1).match(reg); if (r != null) return decodeURIComponent(r[2]); return null; }, /** * @function lock the screen */ pageLock: function () { document.addEventListener("touchmove", pageLockHandler, false) }, /** * @function unlock the screen */ pageUnlock: function () { document.removeEventListener("touchmove", pageLockHandler, false) } } })(); ///<jscompress sourcefile="jm.userDetective.js" /> /** * @Author: Created By McChen * @Date: 2016/5/24 * @Mail: chenjiahao@jd.com * @Version: V1.0.0 */ ;(function (jm) { /**============================ private ==============================*/ var browser = "default"; for (i in jm.getBrowserInfo().appType) { if (jm.getBrowserInfo().appType[i]) { browser = i; } } if (browser == "jrApp" && window.jsBridgeV3 != undefined) { window.jrBridge = window.jrBridge || jsBridgeV3.onReady(); } else { window.jrBridge = null; } //M页登陆 function passportLogin(opts) { if (opts.wqLogin) { var sid = getCookie('wq_auth_token') ; } else { var sid = getUrlString("sid") || getUrlString("token") || getCookie("sid"); } var toPassport = function() { window.location.href = opts.loginUrl; }; if (opts.haveLogin) { //强制重新登陆 toPassport(); } else { if (sid) { opts.trueFn && opts.trueFn(sid); } else { if (opts.autoLogin) { toPassport(); } else { opts.falseFn && opts.falseFn(); } } } } /**============================ public ==============================*/ jm.userDetective = { isLogin: function(opts) { var loginURL = opts.loginUrl || "//passport.m.jd.com/user/login.action?v=1&returnurl="; // 登录中间页地址 var wqLoginUrl = opts.wqLoginUrl || loginURL; // 微信手Q渠道的登录中间页 //'http://wq.jd.com/pinbind/pintokenredirect?biz=618active&url=' var returnURL = opts.returnUrl || window.location.href; //回调地址 var haveLogin = opts.haveLogin || false; //强制重新登陆一次 switch (browser) { case "jrApp": if (jm.getUrlString("token")) { opts.trueFn(jm.getUrlString("token")) } else { if (window.jsBridgeV3) { window.jrBridge = window.jrBridge || jsBridgeV3.onReady(); jrBridge.then(function () { this.jsToGetResp(function (d) { d = typeof d == 'object' ? d : JSON.parse(d); if (d.data) { opts.trueFn && opts.trueFn(d.data); } }, {type: 1, data: ''}) }).call(jrBridge); } else { alert("使用此方法请先引入jsBridge.js"); } } break; case "wx": passportLogin({ autoLogin: opts.autoLogin, trueFn: opts.trueFn, falseFn: opts.falseFn, loginUrl: wqLoginUrl + encodeURIComponent(returnURL), haveLogin: haveLogin, wqLogin: opts.wqLoginUrl }); break; case "mqq": passportLogin({ autoLogin: opts.autoLogin, trueFn: opts.trueFn, falseFn: opts.falseFn, loginUrl: wqLoginUrl + encodeURIComponent(returnURL), haveLogin: haveLogin, wqLogin: opts.wqLoginUrl }); break; default: passportLogin({ autoLogin: opts.autoLogin, trueFn: opts.trueFn, falseFn: opts.falseFn, loginUrl: loginURL + encodeURIComponent(returnURL), haveLogin: haveLogin }); break; } }, toJrAppModule: function(opts) { jrBridge.then(function() { this.jsToNative({ type: opts.type, productId: opts.proId || "", isclose: opts.isclose || false }); }); }, toJdStockModule: function(scheme) { jrBridge.then(function() { this.jsToGetResp(function(d) { d = typeof d == "object" ? d : JSON.parse(d); }, { type: 21, stockData: scheme }); }); } }; })(window.jm); ///<jscompress sourcefile="jm.share.js" /> /** * @Author: Created By McChen * @Date: 2016/5/24 * @Mail: chenjiahao@jd.com * @Version: V0.0.0 */ ;(function (jm) { /**============================ private ==============================*/ var browser = "default"; for(i in jm.getBrowserInfo().appType){ if (jm.getBrowserInfo().appType[i]) { browser = i; } } //金融app if (browser == "jrApp" && window.jsBridgeV3 != undefined) { window.jrBridge = window.jrBridge || jsBridgeV3.onReady(); } //京东app if (browser == "jdApp") { var jdAppVersion = jdAppVersion = function () { var uaArr = navigator.userAgent.toLowerCase().split(';'); return uaArr[2] ? uaArr[2].replace(/\./g, '') : '' }(); var isJdAppGt500 = jdAppVersion >= 500 } //各个渠道的分享方法 var shareFn = { wxShare: function (opts) { var onBridgeReady = function () { // 发送给好友; WeixinJSBridge.on('menu:share:appmessage', function (argv) { WeixinJSBridge.invoke('sendAppMessage', { "appid": opts.appId, "img_url": opts.imgUrl, "link": opts.link, "desc": opts.desc, "title": opts.title }, function (res) { opts.shareSuccess && opts.shareSuccess(); }); }); // 分享到朋友圈; WeixinJSBridge.on('menu:share:timeline', function (argv) { WeixinJSBridge.invoke('shareTimeline', { "img_url": opts.imgUrl, "link": opts.link, "desc": opts.desc, "title": opts.title }, function (res) { opts.shareSuccess && opts.shareSuccess(); }); }); }; if (typeof WeixinJSBridge == "object") { onBridgeReady(); } else { if (document.addEventListener) { document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false); } else if (document.attachEvent) { document.attachEvent('WeixinJSBridgeReady', onBridgeReady); document.attachEvent('onWeixinJSBridgeReady', onBridgeReady); } } }, jrShare: function (opts) { if (window.jsBridgeV3) { window.jrBridge = window.jrBridge || jsBridgeV3.onReady(); jrBridge.then(function () { this.jsToNaWeiXin({ isShow: true, //true 显示btn,false 隐藏btn,默认隐藏 optionType: 1, //1:分享,2:连接跳转类型,3:跳原生模块 btnText: '分享', //原生按钮显示的文字 shareDate: { //optionType=1时候传递,分享信息 appId: '', //微信公共号id,可选填 img: opts.imgUrl, //分享图标 link: opts.link, //分享连接地址 desc: opts.desc, //分享描述 title: opts.title, //分享标题 friendesc: opts.title, //分享朋友圈的文字内容 type: "" //需要回调时候传递,这个type值,杨国亮给,有则传这个值,没有,type 都不要传 } }); }) } }, jdShare: function (opts) { try { if (!jm.getBrowserInfo().systemType.iOS) { //安卓 // 仅当 shareHelper对象存在时才能下发分享配置,更老版本不支持;未来如果该对象删除了也不出错 if (window.shareHelper) { // jdApp 5.0版本新增方法 if (typeof shareHelper.initShare === 'function') { /** * channel 参数可设置,配置后,分享面板仅出现配置过的项目; 如果为空,则显示默认全部 */ shareHelper.initShare(JSON.stringify({ "title": opts.title, "content": opts.desc, "shareUrl": opts.link, "iconUrl": opts.imgUrl, "shareActionType": "S", "channel": "", "callback": "N", "eventId": "" })); } else if (typeof shareHelper.setShareInfo === 'function') { shareHelper.setShareInfo(opts.title, opts.desc, opts.link, opts.imgUrl) } } } else if (jm.getBrowserInfo().systemType.iOS) { var link; // jdApp 5.0及以上版本 if (isJdAppGt500) { jsonObj = { category: "jump", des: "share", type: "111", title: opts.title, content: opts.desc, shareUrl: opts.link, //分享的图片url,自定义, V 5.0 之前,使用该字段下发分享icon url imageUrl: opts.imgUrl, //分享的图片url,自定义,V 5.0 之后,使用该字段下发分享 icon url iconUrl: opts.imgUrl, channel: "", isCallBack: "N", shareActionType: "S" } link = 'openApp.jdmobile://virtual?params=' + JSON.stringify(jsonObj); } else { // 包括 jdApp5.0以下,以及非 jdApp link = 'openapp.jdmobile://communication?params={' + '"action":"syncShareData",' + '"title":"' + opts.title + '",' + '"content":"' + opts.desc + '",' + '"shareUrl":"' + opts.link + '",' + '"iconUrl":"' + opts.imgUrl + '",' + '"isCallBack":"N"' + '}'; } location.href = link; } } catch (e) { } }, sqShare: function (opts) { var siv = setInterval(function () { if (typeof(mqq) != "undefined" && typeof(mqq.ui) != "undefined") { mqq.ui.setActionButton({ iconID: 4, callback: function () { mqq.ui.showShareMenu(); } }); mqq.ui.setOnShareHandler(function (type) { if (typeof(type) == "undefined")mqq.ui.showShareMenu(); else { mqq.ui.shareMessage( { title: opts.title, desc: opts.desc, share_type: type, image_url: opts.imgUrl } ); } }); clearInterval(siv); } else { arguments.callee.call(this); } }, 500); }, wyShare: function(opts) { window.walletShare = function() { jdp.shareUrl({ url: opts.link, title: opts.title, desc: opts.desc, channel: "WX|QQ", callback: function(status) {} }); }; if (jm.getBrowserInfo().systemType.iOS) { var timer = setInterval(function() { if (window.WebViewJavascriptBridge) { jdp.setMenu([ { menuTitle: "分享", menuAction: "walletShare" } ]); clearInterval(timer); } }, 100); } else { jdp.setMenu([ { menuTitle: "分享", menuAction: "walletShare" } ]); } } }; /**============================ public ==============================*/ jm.share = { setShare: function (opts) { switch (browser) { case "wx": //微信里 shareFn.wxShare(opts); break; case "jrApp": shareFn.jrShare(opts); break; case "jdApp": shareFn.jdShare(opts); break; case "mqq": shareFn.sqShare(opts); break; case "wyApp": shareFn.wyShare(opts); break; } } } })(window.jm); ///<jscompress sourcefile="jm.export.js" /> /** * @Author: Created By McChen * @Date: 2016/5/25 * @Mail: chenjiahao@jd.com * @Version: V1.0.0 */ ;(function (jm) { for(i in jm){ if(typeof (jm[i]) == "object"){ for(j in jm[i]){ if(typeof (window[j])=="undefined"){ window[j] = jm[i][j]; } } } } if (typeof define == "function" && seajs != undefined) { define(function (require, exports, module) { module.exports = jm; }) } else { window.jm == "undefined" && (window.jm = jm); } })(window.jm);