History API在各浏览器下的支持情况:


HTML5的Histroy API

不支持

HTML5的Histroy API

4.0+

HTML5的Histroy API

5.0+

HTML5的Histroy API

8.0+

HTML5的Histroy API

不支持

比较典型的是GitHub,在点击代码文件夹和文件时,会发现它的url地址栏变换了、标题栏变化了、前进后退按钮也变化了(跟新开了一个新页面感觉一样),但体验起来很平滑(外层框架的内容没有重新加载,例如:登录信息、是否关注主人等),然后是ajax载入新内容。

history在HTML4的时代里,有如下几个方法和属性,应该很熟悉:

length、back()、forward()、go([delta])

在HTML5中又添加了两个方法:

pushState(data, title[,url])、replaceStage(data, this [,url])

需要注意的是在使用replaceStage,传入的url必须和当前页的协议、所在域完全相同(即使不同的子域都不行),否则会提示安全错误。

更多内容可以参考:

http://diveintohtml5.org/history.html

http://dev.w3.org/html5/spec-author-view/history.html

如果想在兼容其它老浏览器,可以使用History.js

 

这里写了一个测试实例,参考至:http://html5demos.com/history

因为URL变换了,而在刷新的时候页面又不能进行跳转,此时需要在自己的web服务器上写一些规则了(我本机使用的是nginx),在server_name为meteoric.com的vhost中添加如下规则:

location ~ ^/history/.*$ {
        rewrite ^/history/.*$ /html5/history/index.html last;
}

页面访问路径是:http://meteoric.com/history/

HTML5的Histroy API

HTML5的Histroy API 

这样即使我刷新页面,所有以history开头的请求,都将转至http://meteoric.com/history/index.html

/=======/

1、因为页面没有跳转,所以在点击链接的时候可以使用ajax请求并渲染数据(类似github的效果)

2、进页面,可以获取到当前URL,然后正则取出histroy其后的内容,判定加载哪一种资源

 

页面完整的HTML代码:

>

因为需要web服务器的支持,所以上述效果无法在blog中进行预览。需有兴趣,可搭建一个简单的环境进行测试~

 

如果有兴趣浏览兼容ie6+(无定时器)的history,可以阅读人人网前端开发人员的这篇文章:http://jingwei.li/blog/?p=183

之前我也写过一篇相关的文章:”不使用定时器实现的onhashchange”,代码有参阅人人网前台脚本(一时好奇就右击源码大致扫了一下)

相关文章:

  • 2022-12-23
  • 2022-02-10
  • 2021-09-26
  • 2022-01-27
  • 2022-03-05
  • 2022-02-22
  • 2022-12-23
猜你喜欢
  • 2021-06-15
  • 2022-02-19
  • 2021-10-19
  • 2022-01-20
  • 2021-08-26
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案