淘宝首页源码藏美女彩蛋(上)(UED新作2013egg)
今日,偶尔翻看淘宝源码,发现竟有美女形状源码。如下图:
  
此段代码在console中运行,结果更为惊叹。
  
亲手尝试的读者已经看到了代码运行的结果。taobao.com的console打印出了UED的招聘信息。淘宝的页面在短暂的loading之后进入了UED的宣传遮罩层,同时提醒用户打开摄像头...可能读者已经发现了更多有趣的东西,这些有趣的东西感兴趣的同学可以慢慢挖掘。这里很多人已经迫不及待想知道为什么。
我们看"美女"的源码,进入美女的世界...
一.美女爱彩蛋
美女的源码,采用了匿名函数自执行的方式。为方便大家,还是贴过来:
javascript:Function('a,l,i,t,b,u,e,d',"a=['"+[
'                :h8G895r,',
'             ,hA@@@@@@@@#&5:',
'            S#@Hs:;h&@@@@@@#3',
'           8F@P      r&@@@@@@A;',
'          9.@e;grgr   :9#@@@@@M;',
'         h&@&&FiP9.,   ;8GH@@@@B.',
'        :e@g@g (5":%       iA@@@5',
'       .c@j@oG      ;s,:    .A@@#5',
'       ri@n@ Bu,   .::. .;,  ;@@@M ,:',
'      .sM%@c@s&h   sh;,..,.  h@@@B sr',
'      .i@d@u@.@msj         ;9@@s8# si',
'      s@Mt@a@o@b@aXos.:cro9m@"@) ;,s1.',
'      rM#@@@@@@@@@B#@#&35s38#@@@8  i3;,',
'      r&M@@@@@@@@@S:sS3r ,hS@@@@@&,,i:;;.',
'      ,1G@@@@@@@@@@5  :;:SGM@@@@@&.:,:8&hir:',
'       ;&@@@@@@@@@@B;   1HM@@@@@@Ms:,;r5h;H@,',
'        G@@@@@@@@@@G:   rsi&@@@@@@&:   ,:,X9,.',
'     r8M@@@@@@@@@@@#8r.    G@@@@@@@B3;:,.:s::;',
'   :G&B@@@@@@@@@@@@@@@MAXXXB@@@@@@@@@B31hi:,:;;',
'   sGi.;3#@@@@@@@@@@@@@@@@@@@@@@@@@@@@#9rr;,,,i,',
'    h1:  ,S#@@@@@@@@@@@@@@@@@@@@@@@@@@@@Xhi.  ,r',
'    13i,.  :X@@@@@@@@@@@@@@@@@@@@@@@@@@MXh...,;r:',
'    iXh;,..  9@@@@@@@@@@@@@@@@@@@@@@@@@@MA9hr;:is:',
'    ,X9r:,,.. 3@@@@@@@@@@@@@@@@@@@@@@@@@@@@G5s;;sh,',
'     9&5i;:,,. S@@@@@@@@@@@@@@@@@@@@@@@@@@@B9hsrsh1',
'     sBG5i;::,..72&52&32&12&91&71&51&31&11&9&7&5&3&1',
'     :11,11&9&7&5&3&1:01,9&7&5&3&1:9,7&5&3&1:8,5&3&1:',
'      7,11&9&7&5&3&1:6,9&7&5&3&1:5,7&5&3&1:4,3&1:3@821'
].join("','")+"'];l=a.join(i='').replace(/\\s+/g,i)[d='split'](i).reverse().join(i);l=l.substr(l.indexOf('@')+1,parseInt(l))[d](/[,:]/);while(t=l[b='shift']()){u=l[b]()[d]('&');while(e=u[b]())i+=a[t].replace(/^\\s+/g,'').charAt(+e);}eval(i);")();
为了降低代码的可读性,淘宝可谓用心良苦。将大量的代码写到了函数声明的内部,然后采用匿名函数的自执行。由于代码生涩难懂,我们不做手术刀式的解刨。将代码大致翻译如下:
//页面源代码的翻译
~function(){
var a,l,i,t,b,u,e,d;
//a 是一个数组的数据池
a = [
' :h8G895r,',
' ,FAP@.@e@g@g&&:',
' S&@FsP;.&e@g@g@(3',
' 8"@% r&@@@@@@A;',
' 9c@j;orir :9#@@@@@M;',
' hn@ &uis9%, ;8GH@@@@B.',
' :c@s@h i5d:u iA@@@5',
' ..@m@jG ;s,: .A@@#5',
' r@@t@aBo, .::. .;, ;@@@M ,:',
' .bMa@o@.&c sh;,..,. h@@@B sr',
' .o@m@"@)@;s, ;9@@s8# si',
' sHM@@@@@@@@BXSsi::r19&@@@G 5,s1.',
' rM#@@@@@@@@@B#@#&35s38#@@@8 i3;,',
' r&M@@@@@@@@@S:sS3r ,hS@@@@@&,,i:;;.',
' ,1G@@@@@@@@@@5 :;:SGM@@@@@&.:,:8&hir:',
' ;&@@@@@@@@@@B; 1HM@@@@@@Ms:,;r5h;H@,',
' G@@@@@@@@@@G: rsi&@@@@@@&: ,:,X9,.',
' r8M@@@@@@@@@@@#8r. G@@@@@@@B3;:,.:s::;',
' :G&B@@@@@@@@@@@@@@@MAXXXB@@@@@@@@@B31hi:,:;;',
' sGi.;3#@@@@@@@@@@@@@@@@@@@@@@@@@@@@#9rr;,,,i,',
' h1: ,S#@@@@@@@@@@@@@@@@@@@@@@@@@@@@Xhi. ,r',
' 13i,. :X@@@@@@@@@@@@@@@@@@@@@@@@@@MXh...,;r:',
' iXh;,.. 9@@@@@@@@@@@@@@@@@@@@@@@@@@MA9hr;:is:',
' ,X9r:,,.. 3@@@@@@@@@@@@@@@@@@@@@@@@@@@@G5s;;sh,',
' 9&5i;:,,. S@@@@@@@@@@@@@@@@@@@@@@@@@@@B9hsrsh1',
' sBG5i;::,..G@@@9&7&5&3&1:01,9&7&5&3&1:9,7&5&3&1',
' :8,5&3&1:7,11&9&7&5&3&1:6,9&7&5&3&1:5,7&5&3&1:4,',
' 3&1:3,51&31&11&9&7&5&3&1:2,31&11&9&7&5&3&1:1@421'
]; i = '';
d= 'split';
//将数组转换成字符串倒序之后再转化为数组
l=a.join('').replace(/\s+/g,'').split('').reverse().join('');
//获取位置的数据 美女右下角的数字反序(124)代表了要截取的长度 从@的位置开始截取
l=l.substr(l.indexOf('@')+1,parseInt(l)).split(/[,:]/); /* 根据位置信息搜索出隐藏的字符
l是如下的数组 ["1", "1&3&5&7&9&11&13", "2", "1&3&5&7&9&11&13&15", "3", "1&3", "4", "1&3&5&7", "5", "1&3&5&7&9", "6", "1&3&5&7&9&11", "7", "1&3&5", "8", "1&3&5&7", "9", "1&3&5&7&9", "10", "1&3&5&7&9"]
通过观察发现 数组的奇数项代表a数组的某行,而偶数项代表对应行关键信息的下标。
通过下面的循环将隐藏信息逐字取出。并使用eval执行
*/ while( l.length > 0 )
{
b = 'shift';
t = l.shift(); //t是l数组的奇数项,代表目标字符在a数组的某一行
u = l.shift().split('&');
//
while(u.length>0){
e = u.shift(); //e 是l 数组的偶数项,代表目标字符在某行字符串的具体位置
i+= a[t].replace(/^\s+/g,'').charAt(+e);
}
}
eval(i)
}()
通过翻译后的代码可以看出eval(i)是美女代码的最终目标,美女的图案为i提供了一个数据池,而美女的后三行隐藏着找到i的方法。
好的,相信读者已经知道i的最终结果是 FP.egg&&FP.egg("%cjoin us%cshidu.mj@taobao.com");
原来"美女爱彩蛋"!
关于如何从美女的源码图中找到'FP.egg&&FP.egg("%cjoin us%cshidu.mj@taobao.com")',如果读者有不清楚的地方欢迎讨论。关于FP.egg这行代码做了什么,由于天色已晚,待明日分解。
在阅读本文的同时,别忘了UED是通过这种形式在招聘和吸引前端人才,百度很多产品线也采用console的方式进行招聘。希望大家留意不要错过大好机会。
转载请说明出处:http://www.cnblogs.com/wisdomoon/p/taobaobeauty1.html
淘宝首页源码藏美女彩蛋(上)(UED新作2013egg)的更多相关文章
- 淘宝首页源码藏美女彩蛋(下)(UED新作2013egg)
		
我们已经知道,执行美女会得到"彩蛋",而正是彩蛋做到了taobaoUED展现给大家的神奇的前端魅力.今天我们来看看FP.egg&&FP.egg("%cjo ...
 - android版高仿淘宝客户端源码V2.3
		
android版高仿淘宝客户端源码V2.3,这个版本我已经更新到2.3了,源码也上传到源码天堂那里了,大家可以看一下吧,该应用实现了我们常用的购物功能了,也就是在手机上进行网购的流程的,如查看产品(浏 ...
 - 模仿淘宝首页写的高仿页面,脚本全用的原生JS,菜鸟一枚高手看了勿喷哈
		
自己仿照淘宝首页写的页面,仿真度自己感觉可以.JS脚本全是用原生JavaScript写得,没用框架.高手看了勿喷,请多多指正哈!先上网页截图看看效果,然后上源码: 上源码,先JavaScript : ...
 - Bootrap 项目实战(微金所前端首页)第二部分(首页源码)
		
首页源码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
 - Android中仿淘宝首页顶部滚动自定义HorizontalScrollView定时水平自动切换图片
		
Android中仿淘宝首页顶部滚动自定义HorizontalScrollView定时水平自动切换图片 自定义ADPager 自定义水平滚动的ScrollView效仿ViewPager 当遇到要在Vie ...
 - js实现淘宝首页图片轮播效果
		
原文:http://ce.sysu.edu.cn/hope2008/Education/ShowArticle.asp?ArticleID=10585 <!DOCTYPE html> &l ...
 - 【angularjs】使用angularjs模拟淘宝首页-淘宝头条滚动效果
		
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
 - npm切换成淘宝镜像源
		
0-前言 我们都知道node下载第三方依赖包是从国外服务器下载,不是速度奇慢就是下载异常,切换成国内的淘宝镜像源很有必要: 1-切换方法 $ npm config set registry https ...
 - npm使用淘宝镜像源
		
npm使用淘宝镜像源 单次使用 npm install koa --registry=https://registry.npm.taobao.org 永久使用 配置淘宝镜像源 npm config s ...
 
随机推荐
- 为什么要用hibernate 与基于数据库表结构的项目开发
			
最近开始学习hibernate,其实并不知道要学习什么,有什么用.后来问了一下同事,他就说快捷方便简单,很多事情不用自己做他会帮你做好,但是我觉得不应该是这样的,于是我就去搜了一下,就搜到了一篇帖子, ...
 - bzoj1396: 识别子串
			
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...
 - Linux Hackers/Suspicious Account Detection
			
catalog . Linux黑客帐号攻击向量 . Linux可疑帐号检测模型 1. Linux黑客帐号攻击向量 0x1: 将黑客帐号添加到"root"组 . useradd ha ...
 - MySQL备份方式简介
			
MySQL备份的方式主要分为两种: 文本格式备份: 命令:mysqldump 转储文件:dump file 主要内容:数据库结构及数据(create talbe /insert) 二进制备份:这类备份 ...
 - HDU 4857 逃生(反向拓扑排序)
			
传送门 Description 糟糕的事情发生啦,现在大家都忙着逃命.但是逃命的通道很窄,大家只能排成一行. 现在有n个人,从1标号到n.同时有一些奇怪的约束条件,每个都形如:a必须在b之前.同时,社 ...
 - 《JavaScript权威指南》学习笔记 第三天  找个对象
			
现实生活中真的对象没有找到,在JavaScript 里左一个对象又一个对象,搞的我也是晕晕乎乎不知所云.人事复杂,人心难懂.我虽然是文科生,但是也不善于巧言.还是在js里面找找对象吧.那么我们今天就从 ...
 - Ubuntu学习总结-04 搭建JAVA开发环境
			
JAVA开发环境是一种跨平台的程序设计语言,可以在windows.LINUX等操作系统上进行开发. 1 下载JDK 从以下地址下所需的jdk安装包 . http://www.oracle.com/te ...
 - Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]
			
http://blog.csdn.net/cjjky/article/details/6441104 在Android中的不同Activity之间传递对象,我们可以考虑采用Bundle.putSeri ...
 - WinForm------关于子窗体刷新父窗体问题
			
链接: http://wenwen.sogou.com/z/q242758397.htm
 - UINT数相减
			
UINT32 i = ; UINT32 j = ; i - j > //这个将永远为真,因为他是将将结果按照无符号解析 int = i -j; //这个是-1,是按照有符号解析 今天发现代码里面 ...