index.html 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no" />
  7. <link rel="icon" href="<%= BASE_URL %>favicon.ico">
  8. <!-- <script src='//image.360lj.com/portal/js/jquery.js'></script> -->
  9. <title>mcapp</title>
  10. </head>
  11. <body>
  12. <noscript>
  13. <strong>We're sorry but mcapp doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
  14. </noscript>
  15. <div id="test" style="width: 0;height: 0;"></div>
  16. <div id="app"></div>
  17. <!-- built files will be auto injected -->
  18. </body>
  19. <script>
  20. /**函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串。*/
  21. function ar_encode(str) {
  22. //进行URL编码
  23. return encodeURI(str);
  24. }
  25. /**屏幕分辨率*/
  26. function ar_get_screen() {
  27. var c = "";
  28. if (self.screen) {
  29. c = screen.width + "x" + screen.height;
  30. }
  31. return c;
  32. }
  33. /**颜色质量*/
  34. function ar_get_color() {
  35. var c = "";
  36. if (self.screen) {
  37. c = screen.colorDepth + "-bit";
  38. }
  39. return c;
  40. }
  41. /**返回当前的浏览器语言*/
  42. function ar_get_language() {
  43. var l = "";
  44. var n = navigator;
  45. if (n.language) {
  46. l = n.language.toLowerCase();
  47. } else if (n.browserLanguage) {
  48. l = n.browserLanguage.toLowerCase();
  49. }
  50. return l;
  51. }
  52. /**返回浏览器类型IE,Firefox*/
  53. function ar_get_agent() {
  54. var a = "";
  55. var n = navigator;
  56. if (n.userAgent) {
  57. a = n.userAgent;
  58. }
  59. return a;
  60. }
  61. /**方法可返回一个布尔值,该值指示浏览器是否支持并启用了Java*/
  62. function ar_get_jvm_enabled() {
  63. var j = "";
  64. var n = navigator;
  65. j = n.javaEnabled() ? 1 : 0;
  66. return j;
  67. }
  68. /**返回浏览器是否支持(启用)cookie */
  69. function ar_get_cookie_enabled() {
  70. var c = "";
  71. var n = navigator;
  72. c = n.cookieEnabled ? 1 : 0;
  73. return c;
  74. }
  75. /**检测浏览器是否支持Flash或有Flash插件*/
  76. function ar_get_flash_ver() {
  77. var f = "", n = navigator;
  78. if (n.plugins && n.plugins.length) {
  79. for (var ii = 0; ii < n.plugins.length; ii++) {
  80. if (n.plugins[ii].name.indexOf('Shockwave Flash') != -1) {
  81. f = n.plugins[ii].description.split('Shockwave Flash ')[1];
  82. break;
  83. }
  84. }
  85. } else if (window.ActiveXObject) {
  86. for (var ii = 10; ii >= 2; ii--) {
  87. try {
  88. var fl = eval("new ActiveXObject('ShockwaveFlash.ShockwaveFlash." + ii + "');");
  89. if (fl) {
  90. f = ii + '.0';
  91. break;
  92. }
  93. } catch (e) {
  94. }
  95. }
  96. }
  97. return f;
  98. }
  99. /**匹配顶级域名*/
  100. function ar_c_ctry_top_domain(str) {
  101. var pattern = "/^aero$|^cat$|^coop$|^int$|^museum$|^pro$|^travel$|^xxx$|^com$|^net$|^gov$|^org$|^mil$|^edu$|^biz$|^info$|^name$|^ac$|^mil$|^co$|^ed$|^gv$|^nt$|^bj$|^hz$|^sh$|^tj$|^cq$|^he$|^nm$|^ln$|^jl$|^hl$|^js$|^zj$|^ah$|^hb$|^hn$|^gd$|^gx$|^hi$|^sc$|^gz$|^yn$|^xz$|^sn$|^gs$|^qh$|^nx$|^xj$|^tw$|^hk$|^mo$|^fj$|^ha$|^jx$|^sd$|^sx$/i";
  102. if (str.match(pattern)) {
  103. return 1;
  104. }
  105. return 0;
  106. }
  107. /**处理域名地址*/
  108. function ar_get_domain(host) {
  109. //如果存在则截去域名开头的 "www."
  110. var d = host.replace(/^www\./, "");
  111. //剩余部分按照"."进行split操作,获取长度
  112. var ss = d.split(".");
  113. var l = ss.length;
  114. //如果长度为3,则为xxx.yyy.zz格式
  115. if (l == 3) {
  116. //如果yyy为顶级域名,zz为次级域名,保留所有
  117. if (ar_c_ctry_top_domain(ss[1]) && ar_c_ctry_domain(ss[2])) {
  118. }
  119. //否则只保留后两节
  120. else {
  121. d = ss[1] + "." + ss[2];
  122. }
  123. }
  124. //如果长度大于3
  125. else if (l >= 3) {
  126. //如果host本身是个ip地址,则直接返回该ip地址为完整域名
  127. var ip_pat = "^[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*$";
  128. if (host.match(ip_pat)) {
  129. return d;
  130. }
  131. //如果host后两节为顶级域名及次级域名,则保留后三节
  132. if (ar_c_ctry_top_domain(ss[l - 2]) && ar_c_ctry_domain(ss[l - 1])) {
  133. d = ss[l - 3] + "." + ss[l - 2] + "." + ss[l - 1];
  134. }
  135. //否则保留后两节
  136. else {
  137. d = ss[l - 2] + "." + ss[l - 1];
  138. }
  139. }
  140. return d;
  141. }
  142. /**返回cookie信息*/
  143. function ar_get_cookie(name) {
  144. //获取所有cookie信息
  145. var co = document.cookie;
  146. //如果名字是个空 返回所有cookie信息
  147. if (name == "") {
  148. return co;
  149. }
  150. //名字不为空 则在所有的cookie中查找这个名字的cookie
  151. var mn = name + "=";
  152. var b, e;
  153. b = co.indexOf(mn);
  154. //没有找到这个名字的cookie 则返回空
  155. if (b < 0) {
  156. return "";
  157. }
  158. //找到了这个名字的cookie 获取cookie的值返回
  159. e = co.indexOf(";", b + name.length);
  160. if (e < 0) {
  161. return co.substring(b + name.length + 1);
  162. } else {
  163. return co.substring(b + name.length + 1, e);
  164. }
  165. }
  166. /**
  167.         设置cookie信息
  168.         操作符:
  169.                 0 表示不设置超时时间 cookie是一个会话级别的cookie cookie信息保存在浏览器内存当中 浏览器关闭时cookie消失
  170.                 1 表示设置超时时间为10年以后 cookie会一直保存在浏览器的临时文件夹里 直到超时时间到来 或用户手动清空cookie为止
  171.                 2 表示设置超时时间为1个小时以后 cookie会一直保存在浏览器的临时文件夹里 直到超时时间到来 或用户手动清空cookie为止
  172. * */
  173. function ar_set_cookie(name, val, cotp) {
  174. var date = new Date;
  175. var year = date.getFullYear();
  176. var hour = date.getHours();
  177. var cookie = "";
  178. if (cotp == 0) {
  179. cookie = name + "=" + val + ";";
  180. } else if (cotp == 1) {
  181. year = year + 10;
  182. date.setYear(year);
  183. cookie = name + "=" + val + ";expires=" + date.toGMTString() + ";";
  184. } else if (cotp == 2) {
  185. hour = hour + 1;
  186. date.setHours(hour);
  187. cookie = name + "=" + val + ";expires=" + date.toGMTString() + ";";
  188. }
  189. var d = ar_get_domain(document.domain);
  190. if (d != "") {
  191. cookie += "domain=" + d + ";";
  192. }
  193. cookie += "path=" + "/;";
  194. document.cookie = cookie;
  195. }
  196. /**返回客户端时间*/
  197. function ar_get_stm() {
  198. return new Date().getTime();
  199. }
  200. /**返回指定个数的随机数字串*/
  201. function ar_get_random(n) {
  202. var str = "";
  203. for (var i = 0; i < n; i++) {
  204. str += String(parseInt(Math.random() * 10));
  205. }
  206. return str;
  207. }
  208. // 获取openId
  209. function ar_get_openId() {
  210. return window.sessionStorage.getItem("openId") === null ? "" : window.sessionStorage.getItem("openId")
  211. }
  212. // 获取openId
  213. function ar_get_userPhone() {
  214. return window.sessionStorage.getItem("userPhone") === null ? "" : window.sessionStorage.getItem("userPhone")
  215. }
  216. /* main function */
  217. function ar_main() {
  218. //收集完日志 提交到的路径
  219. var dest_path = "http://139.159.192.185:81/WebClient/servlet/LogServlet?";
  220. // var dest_path = "http://localhost:8090/WebClient/servlet/LogServlet?";
  221. var expire_time = 30 * 60 * 1000;//会话超时时长
  222. //处理uv
  223. //--获取cookie ar_stat_uv的值
  224. var uv_str = ar_get_cookie("ar_stat_uv");
  225. var uv_id = "";
  226. //--如果cookie ar_stat_uv的值为空
  227. if (uv_str == "") {
  228. //--为这个新uv配置id,为一个长度20的随机数字
  229. uv_id = ar_get_random(20);
  230. //--设置cookie ar_stat_uv 保存时间为10年
  231. ar_set_cookie("ar_stat_uv", uv_id, 1);
  232. }
  233. //--如果cookie ar_stat_uv的值不为空
  234. else {
  235. //--获取uv_id
  236. uv_id = uv_str;
  237. }
  238. //处理ss
  239. //--获取cookie ar_stat_ss
  240. var ss_stat = ar_get_cookie("ar_stat_ss");
  241. var ss_id = ""; //sessin id
  242. var ss_count = 0; //session有效期内访问页面的次数
  243. var ss_time = "";
  244. //--如果cookie中不存在ar_stat_ss 说明是一次新的会话
  245. if (ss_stat == "") {
  246. //--随机生成长度为10的session id
  247. ss_id = ar_get_random(10);
  248. //--session有效期内页面访问次数为0
  249. ss_count = 0;
  250. //--当前事件
  251. ss_time = ar_get_stm()
  252. } else { //--如果cookie中存在ar_stat_ss
  253. //获取ss相关信息
  254. var items = ss_stat.split("_");
  255. //--ss_id
  256. ss_id = items[0];
  257. //--ss_count
  258. ss_count = parseInt(items[1]);
  259. //--ss_stm
  260. ss_time = items[2];
  261. //如果当前时间-当前会话上一次访问页面的时间>30分钟,虽然cookie还存在,但是其实已经超时了!仍然需要重新生成cookie
  262. if (ar_get_stm() - ss_time > expire_time) {
  263. //--重新生成会话id
  264. ss_id = ar_get_random(10);
  265. //--设置会话中的页面访问次数为0
  266. ss_count = 0;
  267. //--当前事件
  268. ss_time = ar_get_stm();
  269. } else {//--如果会话没有超时
  270. //--会话id不变
  271. //--设置会话中的页面方位次数+1
  272. ss_count = ss_count + 1;
  273. ss_time = ar_get_stm();
  274. }
  275. }
  276. //--重新拼接cookie ar_stat_ss的值
  277. value = ss_id + "_" + ss_count + "_" + ss_time;
  278. ar_set_cookie("ar_stat_ss", value, 0);
  279. //当前地址
  280. var url = document.URL;
  281. url = ar_encode(String(url));
  282. //当前资源名
  283. var urlname = document.URL.substring(document.URL.lastIndexOf("/") + 1);
  284. urlname = ar_encode(String(urlname));
  285. //返回导航到当前网页的超链接所在网页的URL
  286. var ref = document.referrer;
  287. ref = ar_encode(String(ref));
  288. //网页标题
  289. var title = document.title;
  290. title = ar_encode(String(title));
  291. //网页字符集
  292. var charset = document.charset;
  293. charset = ar_encode(String(charset));
  294. //屏幕信息
  295. var screen = ar_get_screen();
  296. screen = ar_encode(String(screen));
  297. //颜色信息
  298. var color = ar_get_color();
  299. color = ar_encode(String(color));
  300. //语言信息
  301. var language = ar_get_language();
  302. language = ar_encode(String(language));
  303. //浏览器类型
  304. var agent = ar_get_agent();
  305. agent = ar_encode(String(agent));
  306. //浏览器是否支持并启用了java
  307. var jvm_enabled = ar_get_jvm_enabled();
  308. jvm_enabled = ar_encode(String(jvm_enabled));
  309. //浏览器是否支持并启用了cookie
  310. var cookie_enabled = ar_get_cookie_enabled();
  311. cookie_enabled = ar_encode(String(cookie_enabled));
  312. //浏览器flash版本
  313. var flash_ver = ar_get_flash_ver();
  314. flash_ver = ar_encode(String(flash_ver));
  315. // openId
  316. var openId = ar_get_openId();
  317. openId = ar_encode(String(openId));
  318. // userPhone
  319. var userPhone = ar_get_userPhone();
  320. userPhone = ar_encode(String(userPhone));
  321. //当前ss状态 格式为"会话id_会话次数_当前时间"
  322. // var stat_ss = ss_id + "_" + ss_count + "_" + ss_time;
  323. //拼接访问地址 增加如上信息
  324. var dest = dest_path + "url=" + url + "&urlname=" + urlname + "&title=" + title + "&chset=" + charset + "&scr=" + screen + "&col=" + color +
  325. "&lg=" + language + "&je=" + jvm_enabled + "&ce=" + cookie_enabled + "&fv=" + flash_ver + "&ref=" +
  326. ref + "&uagent=" + agent + "&uv_id=" + uv_id + "&ss_id=" + ss_id + "&ss_count=" + ss_count +
  327. "&ss_time=" + ss_time + "&openId=" + openId + "&userPhone=" + userPhone;
  328. //通过插入图片访问该地址
  329. document.getElementById("test").innerHTML += "<img src=\"" + dest + "\" border=\"0\" width=\"1\" height=\"1\" />";
  330. }
  331. ar_main();
  332. // window.onload = function () {
  333. // //触发main方法
  334. // ar_main();
  335. // }
  336. </script>
  337. </html>