微信H5小游戏之「挖红薯大赛」

挖红薯大赛虽然说一直都没有停止过做让自己玩起来都觉得很有意思的游戏的尝试,从最初H5的解密游戏「Metispace」,到基于AIR的跑酷游戏「Rabit Hole」,再有Android原生的「Circle Cutter」,以及到后来参与了朋友的iOS解密游戏「Part of Me」。当然,也还有无聊的时候一些奇奇怪怪的尝试,不过基本都停留在自娱自乐的阶段,最多投投比赛,从没想过把一个游戏呈现到广大用户面前会是怎么样的,适逢微信H5的热潮,就和朋友一块尝试做了一个基于HTML5的微信游戏——「挖红薯大赛」。

这是一个帮线下实体店设计的一个相当简单的游戏,玩家需要做的仅仅只是滑动屏幕,移动人物去挖红薯,并且使得自己挖到的分数尽可能的大,和其他微信游戏一样,你还可以在朋友圈和其他朋友分享你挖到的分数。

不过难以置信的是,就这么一个简单到不能再简单的游戏,还没有开始推广,并且宣传游戏奖励的情况下,仅仅因为测试人员在朋友圈的分享,就取得超乎意料的活跃度,还有相当数量玩家连续好几天重度一样的玩。甚至游戏在地方形成话题,并且有根本不认识的人为其撰写我都没研究出来的游戏攻略,一直都在媒体上在看人讨论微信朋友圈的力量,这回真是真的切切实实的感受到微信社交圈子的可怕。

虽然说只是一个营销用的小游戏,虽然说也和以前一样有着「其实还可以做得更有趣」这样的遗憾,不过每一次的尝试都还是觉得挺开心的。如果亲也很无聊,那也来微信扫一扫下面的二维码解解闷吧(咦

 

2014-11-04-2228317230

 

使用HTML5 CORS特性进行Ajax跨域POST请求

跨域一直以来都是个非常神奇,又非常普遍的问题。出于安全等因素的考虑,通常情况下,浏览器通常会仅限制资源的访问,XHR(Ajax)的跨域请求是不被允许的。

但跨域的需求却一直都在,为了跨域,勤劳勇敢的程序猿们想出了许许多多的方法,例如,jsonP、代理文件等等。但这些做法增加了许多不必要的维护成本,而且应用场景也有许多限制,例如jsonP并非XHR,所以jsonP只能使用GET传递参数。

在移动应用风生水起的如今,托HTML5的福,Mobile Web,甚至Hybird App也逐渐火起来,在本地文件系统的Web页面,也有需要获取外部数据的需求,而这些需求也必然是跨域的。同时,HTML5也来带了叫“Cross-Origin Resource Sharing”的新特性,来赋予开发者权力决定资源是否允许被跨域访问。

Access-Control-Allow-Origin
CORS通过服务器增加一个特殊的Header[Access-Control-Allow-Origin]来告知客户端跨域的限制,如果浏览器支持CORS的话,如果判断Origin通过的话,就会允许XHR进行请求,而不需要再使用jsonP或者代理文件。

使用这个Header返回被允许请求跨域请求的来源域,例如网站duelist.cn设置了下面的Header
Access-Control-Allow-Origin: http://smdcn.net
这样设置之后,通过http://smdcn.net下的页面对于duelist.cn进行ajax请求就会被允许,而其他网站对duelist.cn依旧会被阻拦,通过这种方式网站拥有者可以自己对此进行限制。

当然,如果不想限制来源,可以通过
Access-Control-Allow-Origin: *
来允许任何站点对该资源进行跨域请求


关于CORS的浏览器支持情况(caniuse cors):
Can I use CORS
* 主流的移动浏览器:√

如果想要需要对于IE8和9支持CORS:可以使用jquery.iecors


设置CORS
对于客户端来说,一般来说不需要进行额外的设置,只要保证浏览器支持CORS即可
对于服务端,需要给支持CORS的资源增加Access-Control-Allow-Origin的Header。
可以通过HTTP服务器进行统一的Header设置,如果执行的是程序脚本,也可以在程序脚本中加入。
例如,PHP的话,使用

Header(“Access-Control-Allow-Origin:*”);

更多关于CORS的使用参考:http://enable-cors.org/


关于Android浏览器的注意事项
在某些版本的Android浏览器中,因为缓存的原因,第一次进行CORS是正常的,但是第二次进行的时候则会失效,对于这个问题,可以通过在Header中增加Cache-Control: no-cache 阻止缓存的方式来解决这个问题


关于跨域请求读取Cookie的需求
CORS的跨域请求默认情况下不发送本地cookie,同时也不接受来自服务器的cookie。
在跨域请求中读写Cookie并不被推荐,但是如果非要使用Cookie的话,需要在服务端返回是增加Header:

Access-Control-Allow-Credentials:true

同时ajax请求时,对XMLHttpRequest对象设置withCredentials = true;

var xhr = new XMLHttpRequest();
xhr.open();
xhr.withCredentials = true;

在Android WebView中使用HTML5的video标签播放本地视频

因为毕设需要,这段时间就一直在做基于HTML5 video定制的播放器,因为开发和测试过程也一直都是配合Nexus7的Chrome进行测试,所以本以为Android上应该会是最为顺利没有问题的,但是在经过PhoneGap封装测试时,发现在iOS上完全正常,但是在Android上反而没办法播放了。

问题出现在用Android的Webview在播放应用assets中视频的时候,但我尝试把视频地址改为互联网地址的时候就正常了。

经过反复测试,发现使用HTML5访问应用资源目录的时候会存在Android权限限制的问题,不过访问sdcard是能够正常使用的,也就是地址是:file://sdcard/ 下的就可以正常使用了。(对于远程文件下载到本地后播放直接下载到sdcard自己的目录即可;如果原先视频文件已经在assets目录的,则可以在启动WebView前复制到sdcard)

上述测试的环境为 Nexus 7 (with Android 4.4.2) / Android 4.4 SDK

PS:

网络上还有说HTML5播放视频需要在AndroidManifest.xml开启硬件加速

<application android:hardwareAccelerated="true"

我用PhoneGap的时候默认生成的就已经是开启的了,就没作另外的测试。

收获

虽然说最终还是没把启动画面做出来
但还是传个看得过去的VI自我满足下吧 XD

距离小学期结束就要过去一周了,才克服各种情绪去回望这个神奇的小学期。

在小学期开始前就开始想过,小学期要么就彻彻底底的滑水,要做项目就一定要做有意义的项目,而不是一个应付小学期做完就丢的项目,当然,如果在过程中能够再学到点什么那就更好了,于是紧接着就是1个多礼拜的思想斗争和方案选题。最终方案的拟定还是相当愉快的,虽说最初非常想下定决心做Android,最后还是用HTML5来做了。

紧接着就是小学期开始的第一周的苦战,连着5天的全天上课,晚上又因为各种事,拖着基本瘫倒的身子回宿舍基本都到了将近10点半,脑子里想的大概只有睡觉了,上了一学期的课从来没有像这5天这样即充满期待,又极度疲惫。但也还算是真心回应了自己的期待吧,这几天不论是CSS规范的再学习,还是HTML5的Canvas的使用,顺带还问到了许多关于游戏开发的不少知识,总而言之还是相当满足的。

接下来几周的项目开题,中期检查虽然觉得老师总不太满意,但基本还是达到了预期,不管怎么说吧,小学期结束那天的汇报还是拿出了个人觉得还算满意的初稿,还是相当让人兴奋的。

很长时间以来,感觉自己一直都在吃老本,虽然很多东西都很想学,但总能找出最后没好好学的理由,归根到底还是惰性吧,真心没想过,不到半个月,去用从来没有接触的东西去实现自己所想,人果然还是被逼出来的啊。

HTML5在路上

好吧,太久没更新了,基本上都杂草丛生了。

好久没有像今天这么兴奋了。今天 html5 研究小组 的  秀野堂主 来学院报告厅做了一个推广HTML5的讲座,讲得很精彩,听得人有点热血沸腾,是的HTML5很美好,但真的还存在很多问题。

因为对于说HTML5好的太多了,确实HTML5有很多特性能解决我之前在一些开发选型上遇到的很多问题,而Web Application必然是大势所趋(目前Google在推,微软在推,360也在推(噗)),于是就不想去总结好处了,谈谈今天乘着提问时间提了(吐槽的)不少问题,其实质量不高,笑点居多,于是就share一下~(其实我只是不想再去吐槽目前因为标准没发布存在各种兼容性问题):

1、微软在推动IE6的灭亡,还建立了一个网站做倒计时,这是好事,但那个表里面更突兀的是国内的IE6占用率依然看了很不舒服,不管在IE6灭亡的速度,还是对于标准支持的动力上,国内显然远远的落后于欧美,目前欧美已经有很多关于HTML5开发的订单了,那么短期HTML5少不了主要还是面向国外的客户,国外的订单,而国内技术社区对于HTML5研究上确实还算是比较领先的,那是不是更多的时候,国内从事技术研究的人还都是在为国外客户服务,在目前国内软件行业,已经有宁可出一个全英文软件,全英文官网在国外销售,或者制作全英文App的趋势了,这对于国内来说,是否算是一种损失呢。

2、目前国内技术圈确实比起原来好很多了,有了更多交流,开放的氛围,更多的聚会交流活动,这确实是一件很值得高兴的事情,但目前搞技术的人总有那么一份偏执,对于新技术的一些执着,和研究,对于新技术在技术圈的推广布道,搞技术我们觉得我们很Open,紧跟时代步伐,这在国内用户来说,有不少依旧觉得这是技术圈的人在毫不考虑用户的自High,那么在对于像HTML5这样新技术推广的时候,除了推动从业者加入,除了“不支持”、“强迫”用户之外,是否有一种更好的方式像用户推广,让用户去体验到这些新技术带来的好处。

3、看好HTML5其实很多时候倒真不是看好新的标签和本地验证的一些特型,更多的是HTML5的API为Web Application提供更大的可能性,而之前没开放一些权限的原因就是安全性问题,尤其是对于本地数据存取上,说HTML应用比EXE安全的前提是当时并不存在那么多在本地的存取和socket网络通信,那么在HTML5要开放这些API的时候,安全性也必然是一个不能别忽视的问题。
(当然,其实这只是我对于今天讲座说HTML5更安全的吐槽罢了,因为这似乎是浏览器开发者需要考虑的问题,而不是HTML5开发者需要考虑的问题?)