(function(a,c,b){if(typeof module!=="undefined"&&module.exports){module.exports=b()}else{if(typeof define==="function"&&define.amd){define(b)}else{c[a]=b()}}})("Fingerprint",this,function(){var a=function(b){var c,d;c=Array.prototype.forEach;d=Array.prototype.map;this.each=function(k,j,h){if(k===null){return}if(c&&k.forEach===c){k.forEach(j,h)}else{if(k.length===+k.length){for(var g=0,e=k.length;g>>16)*e)&65535)<<16)))&4294967295;g=(g<<15)|(g>>>17);g=((((g&65535)*c)+((((g>>>16)*c)&65535)<<16)))&4294967295;h^=g;h=(h<<13)|(h>>>19);b=((((h&65535)*5)+((((h>>>16)*5)&65535)<<16)))&4294967295;h=(((b&65535)+27492)+((((b>>>16)+58964)&65535)<<16))}g=0;switch(k){case 3:g^=(j.charCodeAt(d+2)&255)<<16;case 2:g^=(j.charCodeAt(d+1)&255)<<8;case 1:g^=(j.charCodeAt(d)&255);g=(((g&65535)*e)+((((g>>>16)*e)&65535)<<16))&4294967295;g=(g<<15)|(g>>>17);g=(((g&65535)*c)+((((g>>>16)*c)&65535)<<16))&4294967295;h^=g}h^=j.length;h^=h>>>16;h=(((h&65535)*2246822507)+((((h>>>16)*2246822507)&65535)<<16))&4294967295;h^=h>>>13;h=((((h&65535)*3266489909)+((((h>>>16)*3266489909)&65535)<<16)))&4294967295;h^=h>>>16;return h>>>0},hasLocalStorage:function(){try{return !!window.localStorage}catch(b){return true}},hasSessionStorage:function(){try{return !!window.sessionStorage}catch(b){return true}},hasIndexDb:function(){try{return !!window.indexedDB}catch(b){return true}},isCanvasSupported:function(){var b=document.createElement("canvas");return !!(b.getContext&&b.getContext("2d"))},isIE:function(){if(navigator.appName==="Microsoft Internet Explorer"){return true}else{if(navigator.appName==="Netscape"&&/Trident/.test(navigator.userAgent)){return true}}return false},getPluginsString:function(){if(this.isIE()&&this.ie_activex){return this.getIEPluginsString()}else{return this.getRegularPluginsString()}},getRegularPluginsString:function(){return this.map(navigator.plugins,function(c){var b=this.map(c,function(d){return[d.type,d.suffixes].join("~")}).join(",");return[c.name,c.description,b].join("::")},this).join(";")},getIEPluginsString:function(){if(window.ActiveXObject){var b=["ShockwaveFlash.ShockwaveFlash","AcroPDF.PDF","PDF.PdfCtrl","QuickTime.QuickTime","rmocx.RealPlayer G2 Control","rmocx.RealPlayer G2 Control.1","RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)","RealVideo.RealVideo(tm) ActiveX Control (32-bit)","RealPlayer","SWCtl.SWCtl","WMPlayer.OCX","AgControl.AgControl","Skype.Detection"];return this.map(b,function(c){try{new ActiveXObject(c);return c}catch(d){return null}}).join(";")}else{return""}},getScreenResolution:function(){var b;if(this.screen_orientation){b=(screen.height>screen.width)?[screen.height,screen.width]:[screen.width,screen.height]}else{b=[screen.height,screen.width]}return b},getCanvasFingerprint:function(){var d=document.createElement("canvas");var c=d.getContext("2d");var b="http://www.sanxc.com";c.textBaseline="top";c.font="14px 'Arial'";c.textBaseline="alphabetic";c.fillStyle="#f60";c.fillRect(125,1,62,20);c.fillStyle="#069";c.fillText(b,2,15);c.fillStyle="rgba(102, 204, 0, 0.7)";c.fillText(b,4,17);return d.toDataURL()}};return a}); ;(function (name, context, definition) { if (typeof module !== 'undefined' && module.exports) { module.exports = definition(); } else if (typeof define === 'function' && define.amd) { define(definition); } else { context[name] = definition(); } })('WayiiCore', this, function () { var object = {}; //获取uuid object.getUUid = function(){ var uuid = new Fingerprint().get(); return uuid; } //统计额外参数 object.getExtendParams = function(){ var paramsArr = []; paramsArr.push('uuid=' + object.getUUid()); paramsArr.push('su='+encodeURIComponent(document.referrer)); return paramsArr.join('&'); } //设置首页 object.setHome = function(obj, url){ try{ obj.style.behavior='url(#default#homepage)'; obj.setHomePage(url); }catch(e){ if(window.netscape){ try{ netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); }catch(e){ alert("抱歉,此操作被浏览器拒绝!\n\n请在浏览器地址栏输入“about:config”并回车然后将[signed.applets.codebase_principal_support]设置为'true'"); } }else{ alert("抱歉,您所使用的浏览器无法完成此操作。\n\n您需要手动将【"+url+"】设置为首页。"); } } } //收藏本站 object.addFavorite = function(title, url) { try { window.external.addFavorite(url, title); }catch (e) { try { window.sidebar.addPanel(title, url, ""); } catch (e) { alert("抱歉,您所使用的浏览器无法完成此操作。\n\n加入收藏失败,请进入新网站后使用Ctrl+D进行添加"); } } } //初始化评论模块 object.initComment = function(elemid){ var elem = document.getElementById(elemid), id = elem.getAttribute('data-id') || 0, type = elem.getAttribute('data-type') || '', init = elem.getAttribute('data-init') || 0, _csrf = elem.getElementsByClassName('wayii-csrf')[0].value; if(init == 1 || id == 0 || type == '')return; //刷新验证码 object.onEvent('click', elem.getElementsByClassName('wayii-verify-img')[0], function(){ this.src = '/action/verifyimage?id=comment'; }); //ajax提交 //发表评论 object.onEvent('click', elem.getElementsByClassName('wayii-btn-pub')[0], function(){ var content = elem.getElementsByClassName('wayii-text-text')[0].value, code = elem.getElementsByClassName('wayii-verify-text')[0].value; if(content == ''){ return showtip('评论内容不能为空'); } if(code == ''){ return showtip('请输入验证码'); } object.ajax('/action/pubcomment', {id: id, type: type, content: content, code: code, _csrf: _csrf}, function(da){ //发表成功 innerComment('prepend', da.comment); showResult(da.result); init_publish(); },{ error: function(da){ showtip(da.errmsg); }, fail: function(da){ showtip('错误码:' + da.statusCode); } }); }); //刷新评论 object.onEvent('click', elem.getElementsByClassName('wayii-btn-refresh')[0], function(){ getCommentList('refresh'); }); //加载更多评论 object.onEvent('click', elem.getElementsByClassName('wayii-loadmore')[0], function(){ getCommentList('append'); }); var tipbox = elem.getElementsByClassName('wayii-errortip')[0], //错误提示框 commentBox = elem.getElementsByClassName('wayii-listbox')[0], //评论列表框 tipTimer = null, //错误框计时器 nowCommentId = 0; //当前评论数据id //显示错误信息 function showtip(msg){ tipbox.innerHTML = msg; clearTimeout(tipTimer); tipTimer = setTimeout(function(){ tipbox.innerHTML = ''; }, 2000); } //初始化评论区域 function init_publish(){ elem.getElementsByClassName('wayii-text-text')[0].value = ''; elem.getElementsByClassName('wayii-verify-text')[0].value = ''; elem.getElementsByClassName('wayii-verify-img')[0].src = '/action/verifyimage?id=comment'; } /** * 获取评论列表 * @param {*} itemtype refresh 重新获取评论, append 继续加载评论信息 */ function getCommentList(itemtype){ if(['refresh', 'append'].indexOf(itemtype) === -1)return; object.ajax('/action/comment', {commentid: nowCommentId, itemtype: itemtype, id: id, type: type}, function(da){ showResult(da.result); innerComment(itemtype, da.list); if(da.list.length > 0){ nowCommentId = da.list[da.list.length - 1]['id']; }else{ showtip('没有更多数据了'); } }, { method: 'get', error: function(da){ showtip(da.errmsg); } }) } /** * 显示评论dom * @param {*} type refresh 刷新所有dom, prepend 在上方加载评论数据, append 在下方加载评论数据 * @param {*} data 数据信息 */ function innerComment(type, data){ if(['refresh', 'append', 'prepend'].indexOf(type) === -1)return; if(data.length == 0)return; var html = ''; for(var i = 0; i < data.length; i++){ var item = data[i]; html += '
'+item['name']+''+item['time']+'
'+item['content']+'
'; if(item['isreply'] == 1){ html += '
'+item['reply_name']+':'+item['reply_content']+''+item['reply_time']+'
'; } html += '
'; } if(type == 'refresh'){ commentBox.innerHTML = html; }else if(type == 'append'){ commentBox.innerHTML = commentBox.innerHTML + html; }else if(type == 'prepend'){ commentBox.innerHTML = html + commentBox.innerHTML; } } //显示统计信息 function showResult(da){ elem.getElementsByClassName('wayii-info-comment')[0].innerHTML = da.comment; elem.getElementsByClassName('wayii-info-person')[0].innerHTML = da.person; } //默认加载评论 getCommentList('refresh'); elem.setAttribute('data-init', '1'); } //切换标签 object.initTag = function(clickDomId, showDomId, params){ var params = params || {}; var tpl = params.tpl || '~name~', showLength = params.length || 10; object.onEvent('click', document.getElementById(clickDomId), function(){ getData(); return false; }); //获取数据 function getData(){ object.ajax('/action/gettag', {length: showLength}, function(da){ var html = getHtml(da); setHtml(html); }, {method: 'get'}); } //获取html function getHtml(da){ var html = ''; for(var i = 0, j = da.length; i < j; i++){ var item = da[i]; var tmpHtml = tpl.replace(RegExp("~router~", "g"), item['router']); tmpHtml = tmpHtml.replace(RegExp("~name~", "g"), item['name']); html += tmpHtml; } return html; } //插入到文档 function setHtml(html){ document.getElementById(showDomId).innerHTML = html; } } //获取短信邮件验证码 object.initSmsCode = function(type, params){ params = params || {}; var btnDom = document.getElementById(params.btnId), //获取按钮 unameDom = document.getElementById(params.unameId), //账号框 verifyDom = document.getElementById(params.verifyId), //图形验证码框 sendType = params.type || 'mobile', //mobile || email _csrf = params.csrf, addParams = params.addParams || {}, isSubmit = true, //是否可提交 timer = null; //定时器 //获取验证码按钮 object.onEvent('click', btnDom, function(){ var uname = unameDom.value, imgcode = verifyDom == null ? '' : verifyDom.value; if(!isSubmit)return; if(unameDom.hasAttribute('disabled'))return; var rules = []; if(sendType == 'mobile')rules.push({field: 'uname', title: '手机号', require: true, length: 11, pattern: /^1\d{10}$/}); else rules.push({field: 'uname', title: '邮箱', require: true, max: 200, pattern: /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/}); if(verifyDom != null)rules.push({field: 'imgcode', title: '图形验证码', require: true}); var errmsg = object.formValidate({uname: uname, imgcode: imgcode}, rules); if(errmsg !== true){ return object.showtip(errmsg); } //发送至服务器 setData(uname, imgcode); return false; }); //发送数据 function setData(uname, imgcode){ updateStatus('start'); var datas = {type: type, sendtype: sendType, uname: uname, verify_image_code: imgcode, _csrf: _csrf}; datas = object.assign({}, datas, addParams); object.ajax('/action/sendsms', datas, function(da){ //发送成功 }, { error: function(da){ if(da.errcode == 1000){ updateStatus('get'); return object.showtip(da.errmsg); }else{ return object.showtip(da.errmsg); } }, method: 'post' }); } //更改状态 function updateStatus(status){ clearInterval(timer); if(status == 'start'){ isSubmit = false; btnDom.setAttribute('disabled', 'disabled'); btnDom.innerHTML = '60秒后重获'; var time = 60; timer = setInterval(function(){ time--; if(time == 0){ clearInterval(timer); updateStatus('get'); return; } btnDom.innerHTML = time + '秒后重获'; }, 980); }else if(status == 'get'){ isSubmit = true; btnDom.removeAttribute('disabled'); btnDom.innerHTML = '获取验证码'; } } //获取html function getHtml(da){ var html = ''; for(var i = 0, j = da.length; i < j; i++){ var item = da[i]; var tmpHtml = tpl.replace(RegExp("~router~", "g"), item['router']); tmpHtml = tmpHtml.replace(RegExp("~name~", "g"), item['name']); html += tmpHtml; } return html; } //插入到文档 function setHtml(html){ document.getElementById(showDomId).innerHTML = html; } } //********************************************************* 封装方法 ************************************************************// //注册事件 object.onEvent = function(type, target, fn){ if(window.attachEvent){ target.attachEvent("on" + type, fn); }else{ target.addEventListener(type, fn); } } //注销事件 object.offEvent = function(type, target, fn){ if(window.detachEvent){ target.detachEvent("on" + type, fn);  }else{   target.removeEventListener(type, fn);  } } //dom加载完成 object.documentReady = function(callback){ if(document.addEventListener){ document.addEventListener('DOMContentLoaded', function(){ //注销时间,避免重复触发 document.removeEventListener('DOMContentLoaded', arguments.callee, false); callback(); }, false); }else if(document.attachEvent){ document.attachEvent('onreadystatechange', function(){ if(document.readyState == 'complete'){ document.detachEvent('onreadystatechange', arguments.callee); callback(); } }); }else{ setTimeout(function(){ callback(); }, 2000); } } //表单验证 object.formValidate = function(datas, configs){ var errmsg = true; for(var i = 0; i < configs.length; i++){ var rule = configs[i]; var value = datas[rule['field']].trim(), title = rule['title']; //必填 if(rule['require'] && value == ''){ errmsg = title + '不能为空'; break; } //最大长度 if (rule['max'] && rule['max'] > 0 && value.length > rule['max']){ errmsg = title + '长度不能超过' + rule['max'] + '位'; break; } //固定长度 if (rule['length'] && rule['length'] > 0 && value.length != rule['length']) { errmsg = title + '长度必须是' + rule['length'] + '位'; break; } //正则 if (rule['pattern'] && !new RegExp(rule['pattern']).test(value)){ errmsg = title + '格式不正确'; break; } } return errmsg; } //json转url参数 object.urlencode = function(params){ if(!params)return ''; var paramArr = []; for (var key in params) { paramArr.push(key + '=' + encodeURIComponent(params[key])); } var paramStr = paramArr.join('&'); return paramStr; } //ajax请求 object.ajax = function(url, data, success, params){ data = data || {}; success = success || function(){}; params = params || {}; params = object.assign({}, { method: 'post', async: true, error: function(){} }, params); //处理参数 var fd = ''; if(params.method == 'get'){ var queryString = object.urlencode(data); if(queryString != ''){ url = url + (url.indexOf('?') === -1 ? '?' : '&') + queryString; } }else if(params.method == 'post'){ fd = new FormData(); for(var item in data){ fd.append(item, data[item]); } } var xhr = new XMLHttpRequest(); xhr.open(params.method, url, params.async); xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); xhr.onreadystatechange = function(){ if (xhr.readyState == 4){ if(xhr.status == 200){ var data = eval('('+ xhr.responseText +')'); if(data.errcode == 0){ success(data.data); }else{ params.error && params.error(data); } params.complete && params.complete(data); }else{ params.fail && params.fail({ 'statusCode': xhr.status, 'statusMsg': '' }); } } } xhr.send(fd); } //合并对象 object.assign = function(obj1, obj2, obj3){ for(var item1 in obj2){ obj1[item1] = obj2[item1]; } for(var item2 in obj3){ obj1[item2] = obj3[item2]; } return obj1; } //动态加载css object.link = function(href){ var link = document.createElement('link'), head = document.getElementsByTagName('head')[0]; var app = href.replace(/\.|\/|\:/g, ''), id = link.id = 'wayiicss-'+app, timeout = 0; link.rel = 'stylesheet'; link.href = href; link.media = 'all'; if(!document.getElementById(id)){ head.appendChild(link); } return true; } //动态加载js object.script = function(src, fn){ var script = document.createElement('script'); script.async = true; script.charset = 'utf-8'; head = document.getElementsByTagName('head')[0]; var app = src.replace(/\.|\/|\:/g, ''), id = script.id = 'wayiijs-'+app; script.src = src; if(!document.getElementById(id)){ head.appendChild(script); } var isOpera = typeof opera !== 'undefined' && opera.toString() === '[object Opera]'; if(script.attachEvent && !(script.attachEvent.toString && script.attachEvent.toString().indexOf('[native code') < 0) && !isOpera){ script.attachEvent('onreadystatechange', function(e){ fn(); }); } else { script.addEventListener('load', function(e){ fn(); }, false); } return true; } //弹出信息框 object.showtip = function(msg){ return object.open({ content: msg, time: 1500 }); } //弹出层 object.open = function(opt){ var options = object.assign({}, { type: 0 //type, 0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层) ,title: false ,content: false ,time: 0 //自动关闭 }, opt); var htmlObj = getHtml(); beforeClose(); document.body.appendChild(htmlObj); callPos(); close(); //关闭一打开的提示框 function beforeClose(){ if(options.type == 0){ var beforeDom = document.getElementsByClassName('wayiicore-layer-msg'); if(beforeDom.length > 0){ document.body.removeChild(beforeDom[0]); } } } //关闭 function close(){ if(options.time > 0){ setTimeout(function(){ beforeClose(); }, options.time); } } //计算位置 function callPos(){ var width = htmlObj.offsetWidth, height = htmlObj.offsetHeight; htmlObj.style.left = '50%'; htmlObj.style.marginTop = (-height/2) + 'px'; htmlObj.style.marginLeft = (-width/2) + 'px'; } //获取方法内容 function getHtml(){ var html = ''; if(options.type == 0){ html += '
'; } //内容 if(options.content){ html += '
'+options.content+'
'; } html += '
'; var node = document.createElement('div'); node.innerHTML = html; return node.firstChild; } } //********************************************************* cms系统初始化 ************************************************************// function WayCms(){ this.configs = {}; } //初始化 WayCms.prototype.init = function(){ var that = this; this.ready(function(da){ that.configs = da; that.init_ready(); }); } WayCms.prototype.init_ready = function(){ this.init_flow(); //流量 //客服 if(this.configs.isopen && this.configs.service){ this.init_service(); } } //加载信息 WayCms.prototype.ready = function(callback){ var that = this; object.documentReady(function(){ that.getConfigs(function(data){ callback(data); }); }); } WayCms.prototype.getConfigs = function(callback){ var that = this; object.ajax('/action/getconfigs', {}, function(data){ that.configs = data; callback(data); }, {method: 'get'}); } //加载访问记录 WayCms.prototype.init_flow = function(){ var bp = document.createElement('script'); bp.src = '/action/flow?' + object.getExtendParams(); var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); } //加载客服 WayCms.prototype.init_service = function(){ var serviceConfig = this.configs.service; if(!serviceConfig.styles || !serviceConfig.qqlist || serviceConfig.styles == 0 || typeof serviceConfig.qqlist != 'object' || serviceConfig.qqlist.length == 0){ return; } var styleid = serviceConfig.styles, resurl = this.configs.resurl; //加载css样式 object.link(resurl + '/app/service/css/service_' + styleid + '.css'); //加载js object.script(resurl + '/app/service/js/service_' + styleid + '.js', function(){ ____WAYIICMS_SERVICE_func(serviceConfig); }); } var waycms = new WayCms(); waycms.init(); return object; });