单页面hash跳转简要记录
来源:互联网 发布:绕x轴顺时针旋转矩阵 编辑:程序博客网 时间:2024/05/17 23:43
现在有越来越多的需求,需要在一个复杂页面(有很多ajax异步操作,使用 js 来控制页面的展示)实现导航,书签之类的功能,同时支持浏览器向前向后浏览。由于兼容性问题,目前有三种实现的方案。这里作一下简要记录:
1. pushState
html5 提供了新的 history api,可以让开发者动态修改浏览器的url,而不会引起整个页面的重绘,给用户带来更好的体验,api 定义如下:
Pushes the given data onto the session history, with the given title, and, if provided and not null, the given URL.
一个简单的监听方法如下所示:
window.addEventListener("popstate", function(e) { // 执行恢复工作 // history.state 即为之前设置的 data 数据});
http://www.w3.org/TR/html5/browsers.html#the-history-interface
https://dev.opera.com/articles/html5-history-api/
http://diveintohtml5.info/history.html
一个简单的编写模式如下:
window.onhashchange = hashChanged;或者是:window.addEventListener("hashchange", hashChanged, false);或者是:<body onhashchange="hashChanged();">
在事件回调中可以根据 location.hash 拿到最新的hash值,从而执行页面的局部刷新。
在前面,我们使用 pushState来修改当前页面url,而使用 hashchange事件的时候,
可以直接修改 location.hash 来达到触发 hashchange事件。
另外,当首次进入页面的时候,这时候,不管链接有没有hash,都不会触发 hashchange事件,
所以页面要实现初始化操作,根据初始hash值作相应的初始化。
可以参考一些更详细的说明:
https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onhashchange
至于为什么要使用 iframe,那是因为直接修改location的hash值之后,ie不会新增history记录,也就不支持后退操作,而刷新iframe可以增加history记录。针对ie这种顽固的浏览器,总是让人伤神。
4. 后话
可以参考 backbone.js 中 Router和History的实现,已经兼容了这三种情况,细节比较多,有兴趣的朋友可以看看。
0 0
- 单页面hash跳转简要记录
- 单页面hash跳转简要记录
- 单页 hash 跳转
- html5之页面跳转-hash
- 单页面跳转逻辑
- jqm 单页面跳转
- 通过url中的hash(#)来记录页面状态,用以返回、跳转到特定状态
- angularjs_路由单页面跳转
- html5 实现当前页面跳转(单页面)
- html/js定位到锚点(单页hash跳转)
- angular-单页面跳转ui-view
- ASP.NET页面内跳转无刷新-- window.location.hash
- 利用url中的hash来实现页面的跳转
- JS单页面应用实现前端路由(hash)
- Extjs4中表单登录功能,实现登录成功跳转页面
- Form 提交表 单页面刷新不跳转
- angular-单页面跳转/路由参数传递ngRoute
- radio单选按钮选中时当前页面实现跳转
- Android实践——密码本SecretBook
- 实现购物结算功能
- VC commands and tools
- Linux-ubuntu桌面版启动切换文字版
- hdu5427(BestCoder Round #54 (div.2)1001题)
- 单页面hash跳转简要记录
- Cv运动分析与对象跟踪
- vim
- C语言之分支结构
- CentOS安装及配置hadoop
- 机房收费系统 窗体归类
- 2.DHT11数字温湿度传感器的应用
- poj 2488 深搜
- 1008. 数组元素循环右移问题 (20)