fiddler Android下https抓包全攻略

fiddler Android下https抓包全攻略      fiddler的http、https的抓包功能非常强大,可非常便捷得对包进行断点跟踪和回放,但是普通的配置对于像招商银行、支付宝、陌陌这样的APP是抓不到包的,需要一些特殊的配置,本文把fiddler Android下https抓包的详细配置都罗列出来,供大家参考。 一、普通https抓包设置 先对Fiddler进行设置: 勾选“CaptureHTTPS CONNECTs”,接着勾选“Decrypt HTTPS traffic”。同时,由于我们是通过WiFi远程连过来,所以在下面的选项框中选择“…fromremote clients only”。 如果你要监听的程序访问的HTTPS站点使用的是不可信的证书,则请接着把下面的“Ignore servercertificate errors”勾选上。 监听端口默认是8888,你可以把它设置成任何你想要的端口。勾选上“Allow remote computersto connect”。 为了减少干扰,可以去掉“Act assystem proxy on startup”。 3)设置Android设备,添加代理服务器 保证PC所在网络和Android所用的wifi是相通的。 获取PC的局域网IP地址 这里的IP是192.168.0.52。 下面来设置Android设备上的代理服务器: 打开WiFi设置页面,选择要连接的AP,并且长按,在弹出的对话框中,选择“修改网络”。 在接下来弹出的对话框中,勾选“显示高级选项”。在接下来显示的页面中,点击“代理”,选择“手动”。 代理服务器主机名设为PC的IP,代理服务器端口设为Fiddler上配置的端口8888,点”保存”。 这样就可以对普通的https抓包了。 二、过证书校验 上面的设置还不能抓像招商银行、支付宝等APP的https包,因为这些APP对https证书进行了校验,还需要将Fiddler代理服务器的证书导到Android设备上才能抓这些APP的包。 导入的过程: 打开浏览器,在地址栏中输入代理服务器的IP和端口,会看到一个Fiddler提供的页面: 点击页面中的“FiddlerRootcertificate”链接,接着系统会弹出对话框: 输入一个证书名称,然后直接点“确定”就好了。 三、使其在HttpURLConnection下正常抓包 现在招商银行还有支付宝,都可以抓包了,但是对于像陌陌这样使用HttpURLConnection进行通讯的APP还是无能为力 还需要对fiddler进行如下设置: 点击”Rules->CustomizeRules”; 在这个函数OnBeforeResponse后面添加 if (oSession.oRequest[“User-Agent”].indexOf(“Android”)> -1 && oSession.HTTPMethodIs(“CONNECT”)) {oSession.oResponse.headers[“Connection”] = “Keep-Alive”; } 如下图所示: […]

冰点特稿:人民会用脚投票 ——深圳是怎么来的

从陈秉安家位于14楼的阳台望去,可以清晰地看到深圳蛇口的深港西部大桥。这座由深港两地合作兴建、于2007年投入使用的白色大桥,是连接深圳与香港的重要通道,在大多数时间里,桥上车流滚滚,一片繁忙景象。 但在碧水白桥背后,却有着一段几乎被人遗忘的惨痛历史—上世纪50年代至80年代,有将近100万名内地居民,由深圳越境逃往香港。这被研究者认为是冷战时期历时最长、人数最多的群体性逃亡事件,史称“大逃港”。深港西部大桥所在的深圳湾,便是当年逃港者的一条主要路线。 为了弄清这段历史,陈秉安前后用了22年时间,采访了百余名相关人物,收集了大量资料。今年10月,其长篇报告文学《大逃港》公开出版。 在一些历史研究者看来,深圳特区成立30周年之际,这部30多万字作品的问世,有着极为重要的象征意义。因为,“这段此起彼伏规模宏大的逃港风潮,为中国改革开放最为重要的决策之一—深圳经济特区的设立,做了一个深刻而令人心酸的铺垫”。 也正因为此,每当有记者来访,陈秉安都会不断重复深圳宝安的一个农民对他说过的一句话:”改革开放’这4个字,你们是用笔写的,我们,是用血写的!” 请你把我的故事写下来,告诉所有人,在这块土地上,曾经发生过这样的事   后来发生的所有故事,都要从一家酒店的开业庆典说起。 1987年,深圳市罗湖区的一家港资大酒店开业,其总经理邀请深圳特区报派记者出席。这个任务落到了刚刚到报社工作的陈秉安身上。 庆典的开头很寻常,可到了主人致辞的时候,情况却起了变化。台上的总经理,在念了一半欢迎词后,居然捧着演讲稿嚎啕大哭起来。 台下一片寂静,人们都望着这个失态的总经理。他稍微冷静了一下,突然用脚蹬了蹬铺着崭新红地毯的地面,哽咽着说:“我的父亲……20多年前,就在我现在站的这个位置,他背着我,已经快到河边了,一颗子弹打来……” “不瞒大家。”他擦去眼泪,说道,“正是为了他当年对我的期望,要活得有出息,我才把酒店开在了这个地方。” 就像台下的许多人一样,刚刚辞去湖南老家的工作,孤身来深圳“闯天下”的陈秉安,并不清楚在这片土地上里曾经发生过什么。他赶紧询问一个在场的当地居民,才得知,“原来这个老板,是逃港过去的呀”。 “逃港?什么是逃港?”他开始隐隐约约地感觉到,在这个总经理的身上,在这座看起来热火朝天的城市背后,似乎藏着一些不为人知的故事。 不久之后,类似的事情又一次发生。 陈秉安去一家港资工厂采访,邱姓厂主在接受完采访后,突然把他拉到了一个无人之处,问道:“有一段发生在我身上的历史,你敢写吗?敢的话,请你跟我来。” 好奇的陈秉安,坐上了这个厂主的汽车。公路崎岖蜿蜒,进入深圳东部的闸门山。两人在一处河岸边下了车,河对岸便是香港。厂主指着对面的一处小树林说:“请你仔细看。” 陈秉安顺着对方指的方向望去,在小树林的边上,有一丘小小的坟墓。 “那是我的哥哥。”这个厂主的眼睛里,突然蒙上了一层白花花的东西。 在随后的聊天儿中,陈秉安才知道,20多年前,邱姓厂主和哥哥一起从这个地方逃往香港,途中遭遇边防部队的追捕,哥哥背上中枪,他眼睁睁地看着哥哥倒在河里,却没有一点办法。 后来,他在香港打拼出了一番事业,还把厂子设到了深圳。在来内地之前,他在河的那边堆了一座空坟,立了一块墓碑。 “请你把我的故事写下来,告诉所有人,在这块土地上,曾经发生过这样的事。这对我个人,对我们的国家,对我们的民族,都是一笔财富。”他这么恳求陈记者。 从那一刻起,陈秉安突然意识到一种使命感,“就如同已经被掩埋了许多年的宝藏,突然无意中露出了一丝缝隙”。 他开始寻访这段此前少有人知的历史。工作一有空隙,他便奔波于宝安县农村的山中小径、旧村瓦舍,采访那些逃港的亲历者,听他们倾诉当年藏在心底的种种怨气,以及对香港天堂般的幻想。 11月初一个阳光明媚的午后,62岁的陈秉安坐在家中书房的椅子上。当年风华正茂的记者,如今已是两鬓花白的老人。在他身旁,有几个装得满满的编织袋,里面都是这些年来的采访笔记。 “如果我不写下它,历史,或许将留下一页空白。”他缓缓说道,“能给那些葬身在大海高山间的穷困的偷渡者和他们的亲人以一点慰藉,是我最大的心愿。” 偷渡者下水后,一边游一边背诵毛主席语录给自己打气   这是一部跨度达30年的惊心动魄的逃亡史。 在当时的深圳,曾经流传着这样一首民谣:“宝安只有三件宝,苍蝇、蚊子、沙井蚝。十屋九空逃香港,家里只剩老和小。” 在民谣背后,则是一组惊人的数字。根据陈秉安掌握的资料,在目前可以查阅到的文件里,从1955年开始出现逃港现象起,深圳历史上总共出现过4次大规模的逃港潮,分别是1957年、1962年、1972年和1979年,共计56万人(次);参与者来自广东、湖南、湖北、江西、广西等全国12个省、62个市(县)。 逃港者多为农民,也包括部分城市居民、学生、知识青年、工人,甚至军人。从政治成分看,普通群众居多,也有共青团员、共产党员,甚至中共干部。有一份来自深圳市的数据表明,至1978年,全市干部中参与逃港者共有557人,逃出183人;市直机关有40名副科级以上干部外逃。 逃港的方式,可分走路、泅渡、坐船3种。按路线,则有东线、中线、西线之别。泅渡通常是首选。偷渡者往往会选择西线,即从蛇口、红树林一带出发,游过深圳湾,顺利的话,大约一个多小时就能游到香港新界西北部的元朗。 广东人把这种水路偷渡称为“督卒”,借用象棋术语,取其“有去无回”之义。在许多当地人的记忆中,一到夏天,水库和河里便人满为患。不少孩童从小就被家人灌输,“好好练游泳,日后去香港”。 偷渡者通常都带有汽车轮胎或者救生圈、泡沫塑料等救生工具,还有人将多个避孕套吹起来挂在脖子上。有些偷渡者下水后,还一边游一边背诵毛主席语录给自己打气:“下定决心,不怕牺牲,排除万难,去争取胜利!” 当时,上述物件都属于严格控制使用的物品。到后来,就连乒乓球都成了其中之一。因为边防部队发现,甚至有人将数百个乒乓球串在一起,作为救生工具。 泅渡毕竟是年轻人所为。中老年人和儿童妇女通常选择陆上偷渡,从深圳梧桐山、沙头角一代,翻越边防铁丝网,粤语中戏称为“扑网”。为了躲避警犬,一些逃港者临行前会到动物园收买饲养员,找一些老虎的粪便,一边走一边撒,警犬闻了粪便的气味,便不敢追踪。 当时对偷渡者的打击是异常严厉的。凡不经合法手续前往香港者,都被视为“叛国投敌”,抓到就处以收容。而边防部队对于偷渡者是最大的障碍。在上世纪60年代之前,边防战士遇到不听命令的偷渡者可以随时开枪,许多偷渡者被打死在滩涂上和山里。此后,由于上级的严令,开枪的现象才逐渐消失。 这种风险极大的逃港风潮,还催生了一个新职业—“拉尸行”。在鼎盛时期,深圳活跃着200多个“拉尸佬”。上世纪70年代末,深圳蛇口海上派出所曾经规定,“拉尸佬”每埋好一具偷渡客尸体,就可以凭证明到蛇口公社领取劳务费15元。 陈秉安曾采访过一个当年的“拉尸佬”。这个老人告诉他,最多的一天,自己从公社领到了750元,而在他埋葬的50具尸体中,有4个是他的亲人。 在某些地方,甚至出现了强行冲关的情况。 据宝安县委《关于制止群众流港工作的情况汇报》等文件记录,1962年,广东出现严重饥荒,大量居民逃往香港。在宝安县由东至西百余里长的公路上,外流群众成群结队,扶老携幼,如“大军南下,来势汹汹”。 这些偷渡者成群结队,每人持一根4尺多长的木棒。带头的偷渡者公开说:“谁阻挠我们,我们就用木棍和他们搏斗,冲过去,就算开枪也不后退!” 由于大量外逃,深圳许多村庄都“十室九空”。1971年,宝安县公安局给上级的《年终汇报提纲》里写道,大望前、马料河、恩上、牛颈窝、鹿嘴、大水坑等许多村庄都变成了“无人村”,有个村子逃得只剩下一个瘸子。为了收容抓到的偷渡者,当地政府新建了百余个收容所,但常常人满为患。 在那个年代,偷渡是公开的秘密。哪家有人偷渡成功,家人不仅不避嫌,反而会在外人面前炫耀,更有好事之徒会大摆筵席,大放鞭炮,以示庆祝。 广州番禺的沙湾大队,还出现了以生产队长为首、党支部书记和治保主任全部参与的偷渡事件。他们外逃之时,甚至还有数十名村民到海边为其饯行。惠阳澳头公社的新村渔业大队,一共才560多人,短短几个月就有112人偷渡成功。大队党支部的6名支部委员,除一名妇女委员外,其余5名都偷渡去了香港。 陈秉安曾遇到过一个逃港者中的传奇人物,这个人先后偷渡了12次都被抓住,创下了一个记录。到第13次,边防战士看了他都脸熟,实在不好意思再抓了,他才成功地逃到了香港。 殊死争夺的阵地、社会主义教育堡垒、反偷渡的“红旗村”,结果逃掉了一大半 为什么要逃港?这个问题,陈秉安曾经问过很多人,得到的答案也各式各样。 最主要的原因,是因为贫穷和饥荒。 1957年,农村集体化进一步升级。宝安县委通过《关于限制农村资本主义发展的几项规定》,限制社员自留地和副业收入,副业收入不能超过全家全年总收入的30%;社外农民不准开荒,不准弃农经商,“以彻底堵塞资本主义漏洞”;“男全劳动力”一年要完成260个工作日;农民家中如果有金银首饰,都要报告政府,然后收为国有。 到了1959年,广东出现了严重的饥荒。一份资料显示,当年全省的粮食总产量只有177.58亿斤,比1958年减产15.71%。1960年仍然是一个减产之年,农民实际比常年少收了61.25亿斤粮食,这相当于他们8个月的口粮。 一个逃港者告诉陈秉安,那个时候,伙食里基本看不到肉和油,就连青菜都很罕见。为了缓解饥饿,他曾经吃过蕉渣、禾秆、木瓜皮、番薯藤,甚至一度还吃过观音土。 当时,宝安一个农民一天的平均收入,大约在7角钱左右,而香港农民一天的收入,平均为70港币,两者间悬殊近100倍。当地流传的民谣唱道:“辛辛苦苦干一年,不如对面8分钱”(指寄信到香港叫亲属汇款回来)。 政治上的迫害,也是逃港的主要原因之一。 著名音乐家马思聪是最为典型的代表。1966年“文革”开始后,时任中央音乐学院院长的马思聪饱受凌辱。1967年,他借一次到深圳演出的机会,铤而走险,乘船逃往香港。他抵达香港的第二天,全港的报纸与电台都报道了这一消息,从而掀起了一场以知识分子和知青为主体、长达10年的逃港浪潮。 陈秉安曾经采访过一个民兵队长,他逃港的原因,今天听起来匪夷所思。 […]

前端构建工具-gulp

以下为windows 环境下前端构建工具-gulp的环境搭建和使用,linux环境大同小异 第一步:安装Node 首先,最基本也最重要的是搭建node环境。访问http://nodejs.org   然后点击大大的绿色的install按钮,下载完成后直接运行程序,就一切准备就绪。npm会随着安装包一起安装,稍后会用到它。 由于node官网需要翻墙,连接不稳定,部分同事可能无法下载,现提供windows 64位4.2.6的安装包node-v4.2.6-x64.msi 为了确保Node已经正确安装,我们执行几个简单的命令。 node -v 回车(Enter),如果正确安装的话,你会看到所安装的Node的版本号,接下来看看npm。 npm -v 这同样能得到npm的版本号。 如果这两行命令没有得到返回,可能node就没有安装正确,尝试重启下命令行工具,如果还不行的话,只能回到第一步进行重装。 第二步:安装ruby,配置compass编译环境 由于我们网站的css采用的动态样式语言sass编写,gulp中会配置将sass编译成css的任务,而sass是用ruby语言编写,所以需要安装配置ruby环境 (1) ruby安装包,或者去ruby官网下载最新安装包http://rubyinstaller.org/ 注:在安装过程中注意勾选此选项,将ruby添加到环境变量中 操作完成后,同样在命令行中ruby -v 和 gem -v 查看版本号确保ruby和gem被正确安装了 centos安装: yum install ruby yum install rubygems (2)在命令行下执行  gem install sass  和  gem install compass 注:compass是依赖于sass的,因此必须在完成sass的安装后才能安装compass 由于gem是架设在国外服务器上,同样有翻墙的问题,在执行gem install XXX的过程中可能会有执行不成功的情况,解决方法就是将gem 的源切换成国内淘宝的源 切换步骤为:   $ gem sources –add https://ruby.taobao.org/ –remove https://rubygems.org/ $ gem […]

JavaScript 浮点数及运算精度调整

JavaScript 只有一种数字类型 Number,而且在Javascript中所有的数字都是以IEEE-754标准格式表示的。浮点数的精度问题不是JavaScript特有的,因为有些小数以二进制表示位数是无穷的。 十进制       二进制 0.1              0.0001 1001 1001 1001 … 0.2              0.0011 0011 0011 0011 … 0.3              0.0100 1100 1100 1100 … 0.4              0.0110 0110 0110 0110 … 0.5              0.1 0.6              0.1001 1001 1001 1001 … 所以比如 1.1,其程序实际上无法真正的表示 ‘1.1′,而只能做到一定程度上的准确,这是无法避免的精度丢失:1.09999999999999999 在JavaScript中问题还要复杂些,这里只给一些在Chrome中测试数据: console.log(1.0–0.9 == 0.1)    //false console.log(1.0–0.8 == 0.2)    //false console.log(1.0–0.7 == 0.3)    //false console.log(1.0–0.6 == 0.4)    //true console.log(1.0–0.5 == 0.5)    //true console.log(1.0–0.4 == 0.6)    //true console.log(1.0–0.3 == 0.7)    //true console.log(1.0–0.2 == 0.8)    //true console.log(1.0–0.1 == 0.9)    //true 那如何来避免这类 1.0-0.9 != 0.1 的非bug型问题发生呢?下面给出一种目前用的比较多的解决方案, 在判断浮点运算结果前对计算结果进行精度缩小,因为在精度缩小的过程总会自动四舍五入: (1.0–0.9).toFixed(digits)  // toFixed() 精度参数digits须在0与20之间 console.log(parseFloat((1.0–0.9).toFixed(10)) === 0.1)   //true console.log(parseFloat((1.0–0.8).toFixed(10)) === 0.2)    //true console.log(parseFloat((1.0–0.7).toFixed(10)) === 0.3)    //true console.log(parseFloat((11.0–11.8).toFixed(10)) === –0.8)   //true 写成一个方法: //通过isEqual工具方法判断数值是否相等 function isEqual(number1, number2, digits){   digits = digits == undefined? 10: digits; // 默认精度为10   return number1.toFixed(digits) === number2.toFixed(digits); } console.log(isEqual(1.0–0.7, 0.3));  //true //原型扩展方式,更喜欢面向对象的风格 Number.prototype.isEqual = function(number, digits){   digits = digits == undefined? 10: digits; // 默认精度为10   return this.toFixed(digits) === number.toFixed(digits); } console.log((1.0–0.7).isEqual(0.3)); //true 接下来,再来试试浮点数的运算, console.log(1.79+0.12)  //1.9100000000000001 console.log(2.01–0.12)   //1.8899999999999997 console.log(1.01*1.3)    //1.3130000000000002 console.log(0.69/10)     //0.06899999999999999 解决方案: //加法函数,用来得到精确的加法结果 //说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。 […]

如何编写无法维护的代码

永远不要(把自己遇到的问题)归因于(他人的)恶意,这恰恰说明了(你自己的)无能。 — 拿破仑 总体原则 Quidquid latine dictum sit, altum sonatur. (随便用拉丁文写点啥都会显得高大上。) 想挫败维护代码的程序员,你必须先明白他的思维方式。他接手了你的庞大程序,没有时间把它全部读一遍,更别说理解它了。他无非是想快速找到修改代码的位置、改代码、编译,然后就能交差,并希望他的修改不会出现意外的副作用。 他查看你的代码不过是管中窥豹,一次只能看到一小段而已。你要确保他永远看不到全貌。要尽量让他难以找到他想找的代码。但更重要的是,要让他不能有把握忽略任何东西。 程序员都被编程惯例洗脑了,还为此自鸣得意。每一次你处心积虑地违背编程惯例,都会迫使他必须用放大镜去仔细阅读你的每一行代码。 你可能会觉得每个语言特性都可以用来让代码难以维护,其实不然。你必须精心地误用它们才行。 命名 “当我使用一个单词的时候” Humpty Dumpty 曾经用一种轻蔑的口气说, “它就是我想表达的意思,不多也不少。“ – Lewis Carroll — 《爱丽丝魔镜之旅》, 第6章 编写无法维护代码的技巧的重中之重是变量和方法命名的艺术。如何命名是和编译器无关的。这就让你有巨大的自由度去利用它们迷惑维护代码的程序员。 妙用 宝宝起名大全 买本宝宝起名大全,你就永远不缺变量名了。比如 Fred 就是个好名字,而且键盘输入它也省事。如果你就想找一些容易输入的变量名,可以试试 adsf 或者 aoeu之类。 单字母变量名 如果你给变量起名为a,b,c,用简单的文本编辑器就没法搜索它们的引用。而且,没人能猜到它们的含义。 创造性的拼写错误 如果你必须使用描述性的变量和函数名,那就把它们都拼错。还可以把某些函数和变量名拼错,再把其他的拼对(例如 SetPintleOpening 和 SetPintalClosing) ,我们就能有效地将grep或IDE搜索技术玩弄于股掌之上。这招超级管用。还可以混淆不同语言(比如colour — 英国英语,和 color — 美国英语)。 抽象 在命名函数和变量的时候,充分利用抽象单词,例如 it, everything, data, handle, […]

Linux 快捷键

Ctrl + a 切换到命令行开始 这个操作跟 Home 实现的结果一样的,但 Home 在某些 unix 环境下无法使用,便可以使用这个组合;在 Linux 下的 vim,这个也是有效的;另外,在 windows 的许多文件编辑器里,这个也是有效的。 Ctrl + e 切换到命令行末尾 这个操作跟 END 实现的结果一样的,但 End 键在某些 unix 环境下无法使用,便可以使用这个组合;在 Linux 下的 vim,这个也是有效的;另外,在 windows 的许多文件编辑器里,这个也是有效的。 Ctrl + l 清除屏幕内容 效果等同于 clear Ctrl + u 清除剪切光标之前的内容 这个命令很有用,在 nslookup 里也是有效的。我有时看见同事一个字一个字的删除 shell 命令,十分崩溃!其实完全可以用一个 Ctrl + u 搞定。 Ctrl + k 剪切清除光标之后的内容 […]

js 页面刷新location.reload和location.replace的区别小结

reload 方法,该方法强迫浏览器刷新当前页面。 语法: location.reload([bForceGet]) 参数: bForceGet, 可选参数, 默认为 false,从客户端缓存里取当前页。true, 则以 GET 方式,从服务端取最新的页面, 相当于客户端点击 F5(“刷新”) replace 方法,该方法通过指定URL替换当前缓存在历史里(客户端)的项目,因此当使用replace方法之后,你不能通过“前进”和“后退”来访问已经被替换的URL。 语法: location.replace(URL) 在实际应用的时候,重新刷新页面的时候,我们通常使用: location.reload() 或者是 history.go(0) 来做。因为这种做法就像是客户端点F5刷新页面,所以页面的method=”post”的时候,会出现“网页过期”的提示。那是因为Session的安全保护机制。可以想到: 当调用 location.reload() 方法的时候, aspx页面此时在服务端内存里已经存在, 因此必定是 IsPostback 的。如果有这种应用: 我们需要重新加载该页面,也就是说我们期望页面能够在服务端重新被创建, 我们期望是 Not IsPostback 的。这里,location.replace() 就可以完成此任务。被replace的页面每次都在服务端重新生成。你可以这么写: location.replace(location.href) replace函数在设置URL方面与location的href属性或assign函数完全一样,但是它会删除history对象的地址列表中的URL,从而使go或back等函数无法导航。 示例 Html代码 收藏代码 下面是相关的应用与知识点: window.location.href window.top.location.replace(“http://www.jb51.net”) top.location.href(“http://www.jb51.net”) window.navigate (“http://www.jb51.net”) Html: ————————————— URL即:统一资源定位符 (Uniform Resource Locator, URL) 完整的URL由这几个部分构成: […]

深圳地铁各站首末班车发车时间汇总!

了最官方,最准确,最简单粗暴的1,2,3,4、5号线沿站最早和最晚一班地铁的时间. 1号罗宝线 罗湖 开往机场东:首06:30;末23:00  国贸 开往罗湖:首06:54;末00:05 开往机场东:首06:31;末23:01 老街 开往罗湖:首06:52;末00:03 开往机场东:首06:33;末23:03 开往益田:首06:32;末23:49 开往双龙:首06:33;末23:18 大剧院 开往罗湖:首06:50;末00:01 开往机场东:首06:35;末23:05 开往新秀:首07:01;末23:55 开往赤湾:首06:36;末23:06 科学馆 开往罗湖:首06:48;末23:59 开往机场东:首06:37;末23:07 华强路 开往罗湖 首06:46 末23:57  开往机场东 首06:39 末23:09 岗厦 开往罗湖:首06:43;末23:54 开往机场东:首06:42;末23:12 会展中心 开往罗湖:首06:41 末23:52  开往机场东:首06:44 末23:14 购物公园 开往罗湖:首06:39 末23:50 开往机场东:首06:46 末23:16 开往益田:首06:33 末00:05 开往双龙:首06:33 末23:03 香蜜湖 开往罗湖:首06:37;末23:48 开往机场东:首06:48;末23:18 车公庙 开往罗湖:首06:34;末23:45 开往机场东:首06:51;末23:21 竹子林 开往罗湖:首06:32;末23:43 开往机场东:首06:30;末23:23 侨城东 开往罗湖:首06:35;末23:41 […]

15 个 jQuery 小技巧

通过使用jQuery中的animate 和scrollTop 方法,不用插件就可以创建一个滚动到顶部的简单动画: // Back to top $(‘.top’).click(function (e) { e.preventDefault(); $(‘html, body’).animate({scrollTop: 0}, 800); }); Back to top 改变scrollTop 的值可以更改你想要放置滚动条的位置。所有你真正需要做的是在800毫秒的时间内设置文档主体的动画,直到它滚动到文档的顶部。 注:小心scrollTop的一些错误行为。 预加载图像 如果你的网页要使用大量开始不可见的(例如,悬停的)图像,那么可以预加载这些图像: $.preloadImages = function () { for (var i = 0; i < arguments.length; i++) { $('‘).attr(‘src’, arguments[i]); } }; $.preloadImages(‘img/hover-on.png’, ‘img/hover-off.png’); 检查图像是否加载 有时为了继续脚本,你可能需要检查图像是否全部加载完毕: $(‘img’).load(function () { console.log(‘image load successful’); }); 你也可以用ID或类替换标签来检查某个特定的图像是否被加载。 […]

使用 Vagrant 打造跨平台开发环境

Vagrant 是一款用来构建虚拟开发环境的工具,非常适合 php/python/ruby/java 这类语言开发 web 应用,“代码在我机子上运行没有问题”这种说辞将成为历史。 我们可以通过 Vagrant 封装一个 Linux 的开发环境,分发给团队成员。成员可以在自己喜欢的桌面系统(Mac/Windows/Linux)上开发程序,代码却能统一在封装好的环境里运行,非常霸气。 安装步骤 1. 安装 VirtualBox 虚拟机还是得依靠 VirtualBox 来搭建,免费小巧。 下载地址:https://www.virtualbox.org/wiki/Downloads * 虽然 Vagrant 也支持 VMware,不过 VMware 是收费的,对应的 Vagrant 版本也是收费的 2. 安装 Vagrant 下载地址:http://downloads.vagrantup.com/ 根据提示一步步安装。 此外,还得下载官方封装好的基础镜像: Ubuntu precise 32 VirtualBox http://files.vagrantup.com/precise32.box Ubuntu precise 64 VirtualBox http://files.vagrantup.com/precise64.box 如果你要其他系统的镜像,可以来这里下载:http://www.vagrantbox.es/ * 鉴于国内网速,我们将下载镜像的步骤单独剥离出来了 3. 添加镜像到 Vagrant 假设我们下载的镜像存放路径是 ~/box/precise64.box,在终端里输入: $ vagrant box […]