History回顾

window.history表示window对象的历史记录

  1. window.history的简单回顾

    • 历史记录中前进/后退,移动到指定历史记录点
    window.history.back();
    window.history.forward(); windiw.history.go(-1);//相当于back()
    window.history.go(1);//相当于forwar()
    window.history.go(0);//相当于刷新
    window.history.length;//查看历史记录栈中一共有多少个记录
  2. 对历史记录点进行修改

    Html5的新API扩展了window.history,能够做到可以存储/替换/监听历史记录点

    • history.pushState(state, title, url)

      在history内新增一个历史记录,会增加后退效果,无刷新改变浏览器地址
      >接受三个参数:
      >state:状态对象,记录历史记录点的额外对象,可为null
      >title:页面标题,目前所以浏览器都不支持,需要的话可以用document.title来设置
      >url:新的网址,必须同域,浏览器地址栏会显示这个网址 window.history.pushState(null, '', 'a.html');
      //页面不刷新,只是改变history对象,地址栏会改变
      window.history.pushState(null, '', '#aaa');
      >//url参数带了hash值并不会触发hashchange事件
      url参数如果是以'?'开头,则url的值会代替seach的值,如果是以'#'开头,则url的值会代替hash的值,如果是以'/'开头,则url的值会代替/后的值。
    • history.replaceState(state, title, url)

      使用姿势跟pushState一样,区别它是修改浏览历史中的当前记录,而并非创建一个新的,并不会增加后退效果,但是和pushState一样都会改变当前地址栏的地址
      window.history.replaceState({a:1}, '', 'b.html')
    • history.state属性

      返回当前页面的state对象,想改变此对象可以给pushState和replaceState的第一个参数传参
      window.history.state //{a:1}
    • 监听历史记录

      • hashchange:当前url的hash改变的时候会触发该事件,ie6.7不支持。
      window.onhashchange = function(){
      console.log(location.hash)
      };//hashchange事件必须绑定再widnow对象上
      做兼容,在ie6、7下可以用setInterval模拟
      if(('onhashchange' in window) && ((typeof document.documentMode === 'undefined') || document.documentMode == 8)) {
      //在IE8以ie7的模式运行时,window下存在onhashchange这个方法,但是永远不会触发这个事件
      //不能用 typeof window.onhashchange === ‘undefined’ 来检测,因为很多支持onhashchange的浏览器下,其初始值就是undefined
      window.onhashchange = function() {
      console.log(window.location.hash);
      };
      } else {//不支持onhashchange用定时器判断hash是否改变
      var location = window.location;
      var oldHash = location.hash;
      setInterval(function() {
      var newHash = location.hash;
      if(newHash === oldHash) {
      console.log(location.hash);
      }
      })
      }
      • popstate: 当浏览记录出现变化时,会触发此事件,可以用此来监听urlwindow.oppopstate = function(event) { console.log(event.state); }//event.state的值是history.state的值
      调用pushState和replaceState事件不会触发popstate事件,当点击后退或者前进按钮时才触发,或者调用go()方法触发;
      ps:页面第一次加载时,在load事件之后,Chrome和Safari能够触发popstate事件,而Firefox和Ie不能;
  3. 简单应用:无刷新页面,改变url,产生历史记录

    很多网站都是左侧为导航栏,右侧为内容区,点击导航栏,只刷新内容不刷新url,并且会生产浏览记录可以点击后退前进;
    具体操作:点击左侧导航链接,阻止页面跳转,把地址pushState到浏览记录,ajax局部刷新;点击后退/前进时,用popstate监听,ajax局部刷新,解决问题

参考文章:

http://www.impng.com/web-dev/hashchange-event-and-onhashchange.html

http://javascript.ruanyifeng.com/bom/history.html#

Js的History对象的更多相关文章

  1. Js之History对象

    Window对象的history属性引用的是该窗口的History对象.History对象是用来把窗口的浏览历史用文档和文档状态列表的形式表示.History对象的length属牲表示浏览历史列表中的 ...

  2. js history对象 手机物理返回键

    有兴趣的可以了解下history对象,不感兴趣也可以直接跳到手机物理返回键监听部分 使用场景: 场景1:项目中一个表单页面,需得填写验证码,填写验证码后提交,由于使用的form直接提交,没有使用AJA ...

  3. 【2017-03-28】JS基础、windows对象、history对象、location对象

    一.JS基础 JS - javaScript 1.js功能: 1).进行数据的运算.2).控制浏览器的一些功能.3).控制元素(属性.内容.样式) js引用位置: 可以放在html页的任意位置. 推荐 ...

  4. JS中的history对象

    window.history指向History对象,它表示当前窗口的浏览历史. History对象保存了当前窗口访问过的所有页面网址. history.back()//后退到前一个网址 等同于 his ...

  5. JS BOM对象 History对象 Location对象

    一.BOM对象 BOM(浏览器对象模型),可以对浏览器窗口进行访问和操作 window对象 所有浏览器都支持 window 对象. 概念上讲.一个html文档对应一个window对象. 功能上讲: 控 ...

  6. JS window对象 History 对象 history对象记录了用户曾经浏览过的页面(URL),并可以实现浏览器前进与后退相似导航的功能。语法: window.history.[属性|方法]

    History 对象 history对象记录了用户曾经浏览过的页面(URL),并可以实现浏览器前进与后退相似导航的功能. 注意:从窗口被打开的那一刻开始记录,每个浏览器窗口.每个标签页乃至每个框架,都 ...

  7. 170104、js内置对象与原生对象

    内置对象与原生对象 内置(Build-in)对象与原生(Naitve)对象的区别在于:前者总是在引擎初始化阶段就被创建好的对象,是后者的一个子集:而后者包括了一些在运行过程中动态创建的对象. 原生对象 ...

  8. 使用JavaScript的history对象来实现页面前进后退(go/back/forward)。

    我们都知道JavaScript有history对象,主要是用来记录浏览器窗口的浏览记录.但是,JS脚本是不允许访问到这个记录里面的内容(隐私). 常见的用法是: history.back();//返回 ...

  9. html5之history对象 控制浏览器前进或后退事件

    一.摘要: 总结用history对象操作浏览器的历史记录的方法,在项目中使用的是mui框架,总结中包括我在实际项目中遇到的问题. 二.总结: 实现效果: 实现代码: 上面的编辑页面加载的时候就要先调用 ...

随机推荐

  1. 【HDOJ】2853 Assignment

    最小费用最大流可解最优解.至于dif如何解,可以把w扩大100倍,如果mission编号和排列P相等则对w+1,然后建立网络流.对结果取模100可以得到没有改变mission的company数目,用c ...

  2. TC598 div2

    题意:给一些物品item[],这些物品的重量在101至300之间,要将这些物品全部放进若干个bins中,已知bins盛的重量为300,可以将bins装满也可以不装满, 问放这些物品最少需要几个bins ...

  3. Tag file directory /struts-tags does not start with "/WEB-INF/tags"

    使用自定义标签,记得引用路径 <%@taglib prefix="s" uri="/struts-tags" %>

  4. 门面模式 到 socket

    http://www.cnblogs.com/java-my-life/archive/2012/05/02/2478101.html 1.门面模式定义: 门面模式是对象的结构模式,外部与一个子系统的 ...

  5. 现代Web的资源/类型/元素--发展趋势

    5月6日,谷歌开发者中心推出了一个 Web 开发最佳实践手册.伯乐在线资源频道摘编该资源后,已邀请一些关注 Web 开发的朋友参与翻译手册. 由于译者朋友几乎都是已在职,都是在工作之余参与,每位的翻译 ...

  6. 2013 ACM区域赛长沙 C Collision HDU 4793

    题意:在平面上0,0点,有一个半径为R的圆形区域,并且在0,0点固定着一个半径为RM(<R)的圆形障碍物,现在圆形区域外x,y,有一个半径 为r的,并且速度为vx,vy的硬币,如果硬币碰到了障碍 ...

  7. UVA 6199 不定根最小树形图

    首先是最小树形图的介绍. 看这个博客.最小树形图 上面介绍的很详细了,我就讲一下这道题的题意. 首先给出一些二维点坐标,这些坐标之间构成一些有向图,根据题意,假设两个点a(x1 ,y1) ,b(x2 ...

  8. []cp,转载]提示MyEclipse Trial Expired,如何手动获取MyEclipse 注册码!很牛!

    1.建立JAVA Project,随便命名,只要符合规则就行. 2.在刚刚建好的Project右击src,新建一个类,命名为MyEclipseGen,把.java里本来有的代码全部删掉,再把下面的代码 ...

  9. MFC发送自定义消息-PostMessage和SendMessage

    PostMessage:把消息投放到线程的消息队列,不能消息被处理就立即返回SendMessage:消息被处理完后才返回 几种发送消息的写法:   ::PostMessage(GetSafeHwnd( ...

  10. MINA2.0原理

    转自:http://blog.csdn.net/liuzhenwen/article/details/5894279 客户端通信过程  1.通过SocketConnector同服务器端建立连接  2. ...