import $ from 'jquery'; import BDY from 'BDY'; import WjySdk from 'extSdk'; import _ from 'underscore' import Indicator from 'mint-ui/lib/indicator'; import Toast from 'mint-ui/lib/toast'; import MessageBox from 'mint-ui/lib/message-box'; import 'mint-ui/lib/indicator/style.css'; import 'mint-ui/lib/toast/style.css'; import 'mint-ui/lib/message-box/style.css'; import PhotoSwipe from 'photoswipe'; import PhotoSwipeUI_Default from 'photoswipe/dist/photoswipe-ui-default'; const isAndroid = navigator.userAgent.indexOf('Android') > -1 || navigator.userAgent.indexOf('Adr') > -1; //android终端 const isiOS = navigator.userAgent.match(/(iPhone|iPod|iPad);?/i); //ios终端 var lib = {}; // require('../artDialog/artDialog'); //+++++++++++++++++++++++++++ hash 参数控制 +++++++++++++++++++++++++++++++++++++ /** * js获取url参数的值,(函数内部decodeURIComponent值) * @author benzhan * @param {string} name 参数名 * @return {string} 参数值 */ function getParam(name) { //先获取#后面的参数 var str = document.location.hash.substr(2); var value = getParam2(name, str); if (value == null) { str = document.location.search.substr(1); value = getParam2(name, str); } return value; }; function getParam2(name, str) { //获取参数name的值 var reg = new RegExp("(^|!|&|\\?)" + name + "=([^&]*)(&|$)"); //再获取?后面的参数 var r = str.match(reg); if (r != null) { try { return decodeURIComponent(r[2]); } catch (e) { return null; } } return null; }; /** * js设置url中hash参数的值, (函数内部encodeURIComponent传入的value参数) * @author benzhan * @param {string} name 参数名 * @return {string} value 参数值 */ function setParam(name, value, causeHistory) { var search = document.location.search.substr(1); if ($.type(name) === "object") { // 支持 setParam(value, causeHistory)的写法 causeHistory = value; value = name; for (var key in value) { search = setParam2(key, value[key], search); } } else { search = setParam2(name, value, search); } if (causeHistory) { if (history.pushState) { history.pushState({}, null, "?" + search); } else { document.location.search = search; } } else { if (history.replaceState) { history.replaceState({}, null, "?" + search); } else { console.error("history.replaceState:" + history.replaceState); } } }; function setParam2(name, value, str) { if ($.type(name) === "object") { // 支持 setParam(value, causeHistory)的写法 str = value; value = name; for (var key in value) { str = setParam2(key, value[key], str); } return str; } else { var prefix = str ? "&" : ""; var reg = new RegExp("(^|!|&|\\?)" + name + "=([^&]*)(&|$)"); var r = str.match(reg); value = encodeURIComponent(value); if (r) { if (r[2]) { var newValue = r[0].replace(r[2], value); str = str.replace(r[0], newValue); } else { var newValue = prefix + name + "=" + value + "&"; str = str.replace(r[0], newValue); } } else { var newValue = prefix + name + "=" + value; str += newValue; } return str; } }; function removeParam(name, causeHistory) { var search = document.location.search.substr(1); var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); r = search.match(reg); if (r) { if (r[1] && r[3]) { search = search.replace(r[0], '&'); } else { search = search.replace(r[0], ''); } } if (causeHistory) { document.location.search = search; } else { if (history.replaceState) { history.replaceState({}, null, "?" + search); } else { console.error("history.replaceState:" + history.replaceState); } } }; function parseHash(strUrl) { strUrl = strUrl ? strUrl : document.location.search.substr(1); //获取参数name的值 var reg = new RegExp("(^|!|#|&|\\?)(\\w*)=([^&]*)", "g"); //先获取#后面的参数 var r = reg.exec(strUrl); var datas = {}; var i = 0; while (r != null) { datas[r[2]] = decodeURIComponent(r[3]); r = reg.exec(strUrl); } return datas; }; // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // +++++++++++++++++++++++++++ get 和 post +++++++++++++++++++++++++++++++++++++ function _getDefaultData(data) { data = data || {}; var ouid = getCookie('ouid'); ouid && (data.ouid = ouid); var defaultKeys = ['gym_id']; for (var i in defaultKeys) { var key = defaultKeys[i]; var value = getLocalData(key); if (value && value != "undefined") { data[key] = value; } } for (var k in data) { var v = data[k]; if (v == null || typeof v === 'undefined') { delete data[k]; } else { if (typeof v === 'string') { data[k] = $.trim(v); } } } return data; } /** * option object {'cache', 'loading', 'onTimeout'} * cache为every、once */ function post(url, data, callback, option) { option = option || {}; // 支持postCross(url, callback)的写法; if ( typeof data == 'function') { option = callback || {}; callback = data; data = {}; } data = _getDefaultData(data); var xhr = new XMLHttpRequest(); BDY.xhrs.push(xhr); BDY.xhrCount++; xhr.index = BDY.xhrs.length; xhr.open("POST", url); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.withCredentials = true; // 兼容ios6.0会缓存 if (window.KalaGame) { xhr.setRequestHeader("Cache-Control", "no-cache"); } data = $.param(data); //获取cache的key if (option['cache']) { var cacheKey = 'ajaxCache-' + url + '?' + data; //如果有cache则不出现loading var isCached = _loadAjaxCache(cacheKey, callback); if (isCached) { option['loading'] = false; if (option['cache'] == "must") { return; } } } if (option['loading']) { xhr.timeout = 15000; showLoading(); } xhr.send(data); xhr.ontimeout = option['onTimeout'] || function () { callback && callback({result:0, code:-11, msg:"网络超时,请重试"}); }; // 响应处理 xhr.onload = function() { BDY.xhrs[xhr.index] = null; BDY.xhrCount--; option['loading'] && hideLoading(); var objResult = _getAjaxResult(xhr.responseText); if (objResult['result'] && option['cache']) { var cache = localStorage.getItem(cacheKey); if (cache && cache == xhr.responseText) { // 网络返回跟缓存一致 return; } else { localStorage.setItem(cacheKey, xhr.responseText); } } _handleResult(callback, objResult); }; } function get(url, callback, option) { option = option || {}; var xhr = new XMLHttpRequest(); BDY.xhrs.push(xhr); BDY.xhrCount++; var data = {}; _getDefaultData(data); for (var key in data) { if (!getParam2(key, url)) { url += url.indexOf('?') >= 0 ? '&' : '?'; url += key + '=' + data[key]; } } xhr.url = url; option['loading'] && showLoading(); xhr.onreadystatechange = function() { if (xhr.readyState != 4) { return; } BDY.xhrs[xhr.index] = null; BDY.xhrCount--; if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304 || (xhr.status == 0 && location.protocol == 'file:')) { option['loading'] && hideLoading(); if (option['type'] == 'text') { callback(xhr.responseText); } else { callback(_getAjaxResult(xhr.responseText)); } } }; xhr.open("GET", url); // xhr.withCredentials = true; xhr.send(); } function _getAjaxResult(text) { var objResult = {}; var objError = { result : 0, msg : "系统繁忙,请稍后再试!" }; try { objResult = JSON.parse(text); if (typeof objResult !== 'object' || objResult === null) { objResult = objError; } } catch (ex) { //非json的处理 objResult = objError; } return objResult; } function _loadAjaxCache(cacheKey, callback) { var cache = localStorage.getItem(cacheKey); if (cache) { var objResult = JSON.parse(cache); objResult._fromCache = true; _handleResult(callback, objResult); return true; } else { return false; } } function _handleResult(callback, objResult) { //session_id失效,重新验证登录 if(!objResult.result && objResult.code == -5) { openLogin(); } else { callback && callback(objResult); } } function _deserialize(value){ if (typeof value != 'string') { return undefined } try { return JSON.parse(value) }catch(e) { return value || undefined } } function getLocalData(key) { return getParam(key) || _deserialize(localStorage.getItem(key)); } function setLocalData(key, val) { localStorage.setItem(key, JSON.stringify(val)) } function getCookie(name) { var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)"); if(arr=document.cookie.match(reg)) return unescape(arr[2]); else return null; } function _setTimeout(callback, timeout) { var timer = setTimeout(callback, timeout); BDY.timeout.push(timer); return timer; } function _setInterval(callback, timeout) { var timer = setInterval(callback, timeout); BDY.interval.push(timer); return timer; } function _clearRes() { var len; var timeout = BDY.timeout; var interval = BDY.interval; len = timeout.length; for (var i = 0; i < len; i++) { clearTimeout(timeout[i]); } len = interval.length; for (var i = 0; i < len; i++) { clearInterval(interval[i]); } // 重置timer BDY.timeout = []; BDY.interval = []; for (var i in BDY.xhrs) { BDY.xhrs[i] && BDY.xhrs[i].abort(); } BDY.xhrs = []; BDY.xhrCount = 0; } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ var loadingDelayHandler = 0; var loadingTimeoutHandler = 0; var loadDialog; function showLoading(text, timeout, cancelable, delay) { // 超时时间为15s timeout = timeout || 15000; // 0.2s后才显示loading delay = delay || 200; if (cancelable == null) { cancelable = true; } else { cancelable = !!cancelable; } if (loadingDelayHandler) { return; } loadingDelayHandler = setTimeout(function() { if (!WjySdk.showLoading(text, timeout, cancelable)) { Indicator.open(text); loadingTimeoutHandler = setTimeout(function(){ hideLoading(); showTip("加载超时,请稍后再试"); }, timeout); } }, delay); } function hideLoading() { loadingDelayHandler && clearTimeout(loadingDelayHandler); loadingDelayHandler = 0; loadingTimeoutHandler && clearTimeout(loadingTimeoutHandler); loadingTimeoutHandler = 0; try { Indicator.close(); } catch(e) {} } function showErrorTip(msg, timeout) { if (!msg) { return; } timeout = timeout || 3000; if (!WjySdk.showErrorTip(msg, timeout)) { Toast({ message : msg, position: 'middle', duration: timeout }); } } function showTip(msg, timeout) { if (!msg) { return; } timeout = timeout || 2000; if (!WjySdk.showTip(msg, timeout)) { Toast({ message : msg, position: 'bottom', duration: timeout }); } } function showDialog(msg, callback, title, buttonLabels) { title = title || "提示"; buttonLabels = buttonLabels || "确定"; MessageBox({ title: title, message: msg, confirmButtonText: buttonLabels }).then(action => { callback && callback(action); }); } function confirm(msg, callback, title, buttonLabels) { title = title || "提示"; buttonLabels = buttonLabels || "确定,取消"; if (!WjySdk.confirm(msg, callback, title, buttonLabels)) { MessageBox.confirm(msg, title).then(action => { callback && callback(true); }).catch(err => { callback && callback(false); }); } } function setTitle(title) { document.title = title; if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) { WjySdk.run2('setTitle',[title]); } // WjySdk.setTitle(title); //解决在IOS微信内置浏览器内无法通过document.title修改页面标题的hack if(checkWXAgent()) { var $body = $('body'); var $iframe = $(''); $iframe.on('load',function() { setTimeout(function() { $iframe.off('load').remove(); }, 0); }).appendTo($body); } } function closeWebView() { if (!WjySdk.closeWebView()) { historyBack(); } } function openUrl(url, title, needTopBar) { if (!WjySdk.openUrl(url, title, needTopBar)) { window.open(url); } } function tryAutoLogin() { if (window.Wjy) { var flag = WjySdk.openLogin(); historyBack(); return flag; } else { return false; } } function openLogin() { var flag = tryAutoLogin(); //调用微信登录接口 if (!flag) { var fromUrl = encodeURIComponent(document.location.href); var url = BDY.mHiydUrl + 'user/login?fromUrl=' + fromUrl; location.href = url; return false; } } function initWxSdk() { if(!checkWXAgent()) { return; } let url = BDY.mHiydUrl + "weixin/getJsSign"; let data = { url : location.href, appid: 6 }; post(url, data, function(ret) { ret.data.debug = /test\.|webdev/.test(document.location.href) ? true : false; ret.data.jsApiList = [ "chooseImage", "previewImage", "uploadImage", ]; wx.config(ret.data); }); } function handleTime(timeStamp,type){ if(!timeStamp) return "--" var date = new Date(timeStamp) var year = date.getFullYear() var month = date.getMonth()+1 var day = date.getDate() var hour = date.getHours() var minute = date.getMinutes() month = month >= 10 ? month : "0"+month day = day >= 10 ? day : "0"+day hour = hour >= 10 ? hour : "0"+hour minute = minute >= 10 ? minute : "0"+minute if(type==2) { return year+"-"+month+"-"+day+" "+hour+":"+minute } else { return year+"年"+month+"月"+day+"日 "+hour+":"+minute } } function checkWXAgent() { var ua = navigator.userAgent.toLowerCase(); if (ua.match(/micromessenger/i) == "micromessenger") { return true; } else { return false; } } function checkWjyAgent() { var ua = navigator.userAgent.toLowerCase(); if (ua.match(/wjy/i) == "wjy") { return true; } else { return false; } } function getDomain(){ var host = location.host; if (host.indexOf("127.0.0.1") > -1 || host.indexOf("test.h5-glance.duowan.com") > -1) { lib.apiUrl = "//test.api.glance.oxzj.net"; lib.upAdminDomain = "//test.up.admin.duowan.com"; } else { lib.apiUrl = "//api-glance.duowan.com"; lib.upAdminDomain = "//phpadmin-up.duowan.com"; } } function getDownloadUrl(){ var downloadUrl = "#"; if(checkWXAgent()) { downloadUrl = "http://a.app.qq.com/o/simple.jsp?pkgname=com.ouj.movietv"; } else { if (isiOS) { downloadUrl = "https://itunes.apple.com/us/app/%E5%BE%AE%E5%89%A7%E9%99%A2-5%E5%88%86%E9%92%9F%E7%9C%8B%E7%89%87/id1268549279?l=zh&ls=1&mt=8"; } else { downloadUrl = "http://www.hiyd.com/static/apkDownload?appid=13" } } return downloadUrl; } function getSchemaUrl(){ return isAndroid ? 'glance://' : 'movietv://' } function getAppName() { let appName; if(lib.getParam("appid") == 1008 || lib.getParam("appid") == 17) { appName = '知了电影' } else { appName = '微剧院' } return appName; } //设置微信分享的参数 function setWxShare(data,sCallback,cCallBack){ //分享数据,success回调,cancel回调 if (!checkWXAgent()) return; var checkWxInterval = setInterval(function(){ if(wx) { clearInterval(checkWxInterval); // 适配https if(!data.imgUrl.match(/http\:\/\/|https\:\/\//)) { data.imgUrl = "https:" + data.imgUrl } wx.ready(function(){ wx.onMenuShareTimeline({ title: data.title, // 分享标题 link: data.link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致 imgUrl: data.imgUrl, // 分享图标 success: function () { sCallback && sCallback(); // 用户确认分享后执行的回调函数 }, cancel: function () { cCallBack && cCallBack(); // 用户取消分享后执行的回调函数 } }); wx.onMenuShareAppMessage({ title: data.title, // 分享标题 desc: data.desc, // 分享描述 link: data.link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致 imgUrl: data.imgUrl, // 分享图标 success: function () { sCallback && sCallback(); // 用户确认分享后执行的回调函数 }, cancel: function () { cCallBack && cCallBack(); // 用户取消分享后执行的回调函数 } }); }); } },200); } //图片预览 function setPreviewImage(imgList, curIndex,w,h) { let handleImgList = [] if (checkWXAgent()) { //微信客户端 _.each(imgList,(img,i)=>{ if(img.indexOf("http")> -1){ handleImgList.push(img) } else { handleImgList.push(`https:${img}`) } }) wx.ready(function() { wx.previewImage({ current: handleImgList[curIndex], urls: handleImgList }); }); } else { _.each(imgList,(pic,i)=>{ handleImgList.push({ src: pic, w: w || 1242, h: h || 1080 }) }) let options = { index: curIndex }; let gallery = new PhotoSwipe($('.pswp').get(0), PhotoSwipeUI_Default, handleImgList, options); gallery.init(); } } function formatHttpProtocol(object) { let fData = JSON.stringify(object); fData = fData.replace(/http\:\/\//g, "//"); return JSON.parse(fData); } /** * APP协议跳转 * @param {String} schemaUrl */ function goSchema(schemaUrl) { var url = getDownloadUrl(); if(isAndroid) { $('body').append(``); } else { window.location = schemaUrl } setTimeout(() => { window.location = url },25); } function init(){ getDomain(); } init(); lib.getParam = getParam; lib.getParam2 = getParam2; lib.setParam = setParam; lib.setParam2 = setParam2; lib.removeParam = removeParam; lib.parseHash = parseHash; lib.post = post; lib.get = get; lib.getLocalData = getLocalData; lib.setLocalData = setLocalData; lib.getCookie = getCookie; lib.setTimeout = _setTimeout; lib.setInterval = _setInterval; lib.clearRes = _clearRes; lib.setTitle = setTitle; lib.closeWebView = closeWebView; lib.openUrl = openUrl; lib.showLoading = showLoading; lib.hideLoading = hideLoading; lib.showErrorTip = showErrorTip; lib.showTip = showTip; lib.showDialog = showDialog; lib.confirm = confirm; lib.checkWXAgent = checkWXAgent; lib.checkWjyAgent = checkWjyAgent; lib.handleTime = handleTime; lib.setWxShare = setWxShare; lib.setPreviewImage = setPreviewImage; lib.formatHttpProtocol = formatHttpProtocol; lib.goSchema = goSchema; lib.downloadUrl = getDownloadUrl() lib.schemaUrl = getSchemaUrl() lib.appName = getAppName() export default lib;