HTML5管理与实际历史的分析(history物)
HTML5新进入历史的管理,更新history对象允许国家的经营历史更方便。
在现代Web应用。用户”前进”和”退却”button切换历史页面。这使得新的页码不会打开一个新的网页前进和后退自如,改善用户体验。
经haschange事件,可以知道URL的參数什么时候发生了变化,也就是什么时候该有所反应。
通过状态管理的API,可以在不载入新页面的情况下改变浏览器的URL。所以须要使用history.pushState()方法。
history.pushState()方法接收三个參数:1.要存的内容 2.标题(一般写个空的字符串) 3.地址(可选)。小样例例如以下
JavaScript代码
history.pushState({name: "menglong"}, '', "li.html");
运行了history.pushState()方法后,新的状态信息就会被增加到历史状态栈,而浏览器地址栏也会变成新的相对URL。
可是,浏览器并不会想server发送请求。即使历史状态改变之后查新location.href也会返回与地址栏中同样的地址。
另外,第二个參数眼下还没有浏览器实现,所以全然能够仅仅传入一个空字符串就可以,或者一个短标题也能够。
第一个參数则应该尽可能提供初始化页面状态所需的各种信息。
由于history.pushState()方法会创建新的历史状态,所以会发现”后退”button也能够使用了。按下”后退”button,会触发window对象的popstate事件。Popstate事件的事件对象有一个state属性,这个属性就包括着当初以第一个參数传递给pushState()的状态对象。
小样例例如以下
JavaScript代码
window.addEventListener('popstate',function(ev){
var state = event.state;
if(state){ // 当第一个页面载入的时候state为空
processState(state)
}
}, false);
得到了这个状态的对象后。必须把页面重置为状态对象中的数据表示的状态(由于浏览器不会自己主动为你做这些)。记住,浏览器载入的第一个页面没有状态,所以”后退”阿牛返回浏览器载入的第一个页面时。event.state值为null。
要更新当前历史状态,能够调用replaceState(),传入的參数与pushState()方法的前两个參数同样。
调用replaceState()不会在历史状态栈中创建新状态,仅仅会重写当前状态。
小样例例如以下
JavaScript代码
history.replaveState({name: "meng"}, "meng1234");
在使用HTML5的历史状态管理机制的时候。须要确保使用pushState()创造的每个”假”URL。在Webserver上都有一个真的、实际存在的URL与之相应。
否则,单机”刷新”button会导致404错误。
支持HTML5历史状态管理的浏览器有Chrome、Safari 5+、Firefox 4+和Opera 11.5+。在Safari和Chrome中,传递给pushState()或replaceState()的状态对象中不能包括DOM元素。
而Firefox支持在状态对象中包括DOM元素。Opera还支持一个history.state属性,它返回当前状态的状态对象。以下就是小样例时间了,结合小样例才干更好的理解HTML5中的历史管理。
加入href值实现历史管理
HTML代码
<input type="button" value="35选7" id="input1" />
<div id="div1"></div>
JavaScript代码
//onhashchange : 事件 : 当hash值改变的时候触发的事件
//hash改变就会出现就会出现历史管理
window.onload = function(){
var oInput = document.getElementById('input1');
var oDiv = document.getElementById('div1');
var obj = {};
oInput.onclick = function(){
var number = randomNum(35,7);
oDiv.innerHTML = number;
var oRN = Math.random();
obj[oRN] = number;
window.location.hash = oRN;
};
window.onhashchange = function(){
var number = obj[window.location.hash.substring(1)] || '';
oDiv.innerHTML = number;
};
function randomNum(alls,now){
var arr = [];
var newArr = [];
for(var i=1;i<=alls;i++){
arr.push(i);
}
for(var i=0;i<now;i++){
newArr.push( arr.splice( Math.floor(Math.random()*arr.length) ,1 ) );
}
return newArr;
}
};
通过HTML5中history对象实现历史管理
HTML代码
<input type="button" value="35选7" id="input1" />
<div id="div1"></div>
JavaScript代码
//pushState : 三个參数:1.要存的内容 2.标题(一般写个空的字符串) 3.地址(可选)
//history.pushState({name: "menglong"}, '', "li.html");
window.onload = function(){
var oInput = document.getElementById('input1');
var oDiv = document.getElementById('div1');
var iNow = 0;
oInput.onclick = function(){
var number = randomNum(35,7);
oDiv.innerHTML = number;
history.pushState(number,'',iNow++);
};
window.onpopstate = function(ev){ //历史管理改变,就会触发
var number = ev.state || '';
oDiv.innerHTML = number;
};
function randomNum(alls,now){
var arr = [];
var newArr = [];
for(var i=1;i<=alls;i++){
arr.push(i);
}
for(var i=0;i<now;i++){
newArr.push( arr.splice( Math.floor(Math.random()*arr.length) ,1 ) );
}
return newArr;
}
};
HTML5实战与剖析之历史管理(history对象)就为大家介绍到这里了。很多其它有关HTML5的相关小内容尽在梦龙小站的HTML5实战与剖析频道。
感谢大家的支持。
版权声明:本文博主原创文章,博客,未经同意不得转载。
HTML5管理与实际历史的分析(history物)的更多相关文章
- [Mugeda HTML5技术教程之16]案例分析:制作跨屏互动游戏
本节我们将要做一个跨屏互动应用的案例分析,该应用时给一家商场做活动使用的,是一个跨屏爱消除游戏.PC端页面显示在连接在PC的大屏幕上,参与活动的玩家可以用自己的手机扫描PC端页面上的二维码,连接成功后 ...
- 命令别名设定:alias,unalias 历史命令:history
1.别名设定举例 alias lm=‘ls -al | more’ 还可以取代现有指令 alias rm='rm -i' 查询现有别名 alias 取消别名 unalias lm 2.历史命令:his ...
- Spring Boot从入门到精通(八)日志管理实现和配置信息分析
Spring Boot对日志的处理,与平时我们处理日志的方式完全一致,它为Java Util Logging.Log4J2和Logback提供了默认配置.对于每种日志都预先配置使用控制台输出和可选的文 ...
- linux(5)查看历史命令执行记录history
前言 我们每次敲打linux命令的时候,有时候想用之前用过的命令,一般情况下,我们都会按↑↓箭头来寻找历史的命令记录,那如果我想用1天前执行的某条命令,难道还要按↑100次?显示这样是不现实的,我们可 ...
- HTML5自学笔记[ 8 ]历史管理
触发历史管理的三种方法: 跳转页面 改变hash值 pushState(在服务器环境下运行) 用hash值来触发历史管理: <!doctype html> <html lang=&q ...
- 深入学习 History 对象管理浏览器会话历史
History对象允许我们操作浏览器会话历史,即加载当前页面的标签页窗口或frame窗口的访问历史.之前有同学咨询我如何实现拦截用户跳转页面并强制用户返回首页后重新请求页面,于是有了本篇博客的主题,本 ...
- partial.js client-side routing(客户端路由-基于HTML5 SPA特性的历史API)
partial.js client-side routing https://github.com/petersirka/partial.js-clientside Framework support ...
- 【Cocos2d-x 3.x】内存管理机制与源码分析
侯捷先生说过这么一句话 : 源码之前,了无秘密. 要了解Cocos2d-x的内存管理机制,就得阅读源码. 接触Cocos2d-x时, Cocos2d-x的最新版本已经到了3.2的时代,在学习Coco ...
- 历史命令:history
[root@linux ~]# history [n][root@linux ~]# history [-c][root@linux ~]# history [-raw] histfiles参数:n ...
随机推荐
- POJ 2991 Crane(线段树+计算几何)
POJ 2991 Crane 题目链接 题意:给定一个垂直的挖掘机臂.有n段,如今每次操作能够旋转一个位置,把[s, s + 1]专程a度,每次旋转后要输出第n个位置的坐标 思路:线段树.把每一段当成 ...
- 千万别用模板给的list.size()巨坑
要用!list.empty()取代i<list.size();否则就不会AC了.
- "ScrollView can host only one direct child"问题解决了
1. 问题叙述性说明: (请注意以下几点大胆). ScrollView作为顶层view时报错,直接导致apk崩溃.具体错误信息例如以下: 12-21 09:12:15.150: D/AndroidRu ...
- mysql自动备份
#!/bin/bash MyUSER="SET-MYSQL-USER-NAME" # USERNAME MyPASS="SET-PASSWORD" ...
- 使用Ambari快速部署Hadoop大数据环境
使用Ambari快速部署Hadoop大数据环境 发布于2013-5-24 前言 做大数据相关的后端开发工作一年多来,随着Hadoop社区的不断发展,也在不断尝试新的东西,本文着重来讲解下Amb ...
- Linux档案种类与扩展名(2013.09.03)
档案种类: 正规档案(regular file ): 第一个字符为 [ -],例如 [-rwxrwxrwx ].另外,依照档案的内容,又大略可以分为: 纯文本档(ASCII) 二 ...
- 用XAML做网页!!—页头
原文:用XAML做网页!!-页头 接续上次进度,我们此次来制作页头. 首先要实现两侧边缘的美化,如下图所示: 在边缘处有一层朦胧的亮度反光效果,这也是通过简单的渐变实现的,而且我们在后面的每个区块中都 ...
- 大话设计模式C++达到-文章12章-外观模式
一.UML画画 关键词:添加Facade层. 二.概念 外观模式:为子系统中的一组接口提供一个一致的界面.此模式定义了一个高层接口,这个接口使得这一子系统更加easy使用. 三.说明 Q:外观模式在什 ...
- NVL NVL2 NVLIF
========Oracle=======NVL (expr1, expr2)->expr1为NULL,返回expr2:不为NULL,返回expr1.注意两者的类型要一致
- JS 在 HTML 中做加减乘除
<script type="text/javascript"> function fun(t){ var fa = parseInt(document.getEleme ...