Archive for February, 2012

140byt.es

刚看到的一个很有趣的网站140byt.es,是一帮JS大牛秀js代码的网站,所有的代码的核心部分都在twiiter长度的140字节以内,有很多实用的代码,也有很多不实用——但是可以给写js的带来另一种思维,或者说只是纯粹膜拜的代码……

例如用正则表达式判断是否是质数(这个真的很神奇啊,正在解读中……):

function(a){return!/^,?$|^(,,+?)\1+$/.test(Array(-~a))};

140个字节核心的俄罗斯方块(应该微博上看到这个的不少了吧):
http://jsbin.com/egiqul/49

HTML5 修改浏览器url而不刷新页面

嘛,起因是黑子大叔在微博上的一条@信息,找起了这个的实现,看了一圈google的中文信息内似乎还没有怎么提到这个的内容,就发表上来。

详细效果就是类似于用Firefox4+/Chrome 5+/Safari 5+/Opera 11.5+登录新浪微博后看到的个人时间轴,在翻页时可以观察到这个效果,地址栏URL变动,但是页面没有刷新,用firebug观察也观察不到刷新整个页面,只有ajax请求的翻页数据。从先前的理解来说,URL的修改必然引起(请注意我不是在说通过锚点修改)浏览器重载页面,但利用HTML5新加入的history.pushState();history.replaceState();可以完全自己维护一个历史记录列表绕开历史记录完全由浏览器控制的机制,从而实现比锚点更加完美的一种页内更新的体验。

代码方面很简单,只要在需要修改url的地方插入一行:

window.history.pushState({"html":response.html,"pageTitle":response.pageTitle}, 'title', urlPath);
//三个参数,分别为:状态对象,标题(目前被浏览器忽略),地址

即可在历史记录里面产生一个新的历史记录(另一个replaceState方法参数完全相同,只是替代掉当前的状态)。
在体验上,非常接近于使用锚点(window.location = “#foo”;),但是mozilla的文档提出了以下三点好处:

  • 新的URL可以是和原始页面URL同域下的任何URL,如果用锚点,只能更新#后面的部分
  • 仅在需要时更新URL,锚点的历史记录在相同时不会创建(即当前已经是”#foo”的情况下,如果再将当前页面锚点设置为”#foo”,不会产生新的历史记录)
  • 可以记录下任意类型的数据,使用锚点的话将要自己维护一份历史数据列表或者把数据转码到一个字符串里

(翻译&描述的有点别扭,见笑了,不过其实应该自己也能体会到这些好处才是)

我自己实现的一个例子:
http://vifix.cn/atelier/demos/html5-update-browser-url-without-reloading-page

Read the rest of this entry >>