一、访问历史 API

通过history对象实现前进、后退和刷新之类的操作

history新增的两个方法history.replaceState()history.pushState()方法属于HTML5浏览器新增的属性,所以IE9以下的是不支持的。

1、history.replaceState() ;顾名思义就是替换的意思,所以它的作用就是替换当前地址栏的url

history.replaceState(data,"页面的title","需要改变的url") ;接收三个参数

2、history.pushState() ;看到push大家首先应该想到的是数组,没错,这个方法就是往浏览器的history里压入一条url,就像数据结构里的栈一样,这个压入的url会在栈

的最顶端,当你点击浏览器的前进或者倒退按钮时,便会拿出栈顶的url来定位,从而达到改变history的作用但是并不刷新!

3、popstate事件

当history实体被改变时,popstate事件将会发生。如果history实体是有pushState和replaceState方法产生的,popstate事件的state属性会包含一份来自history实体的state对象的拷贝

4、读取当前的state

当页面加载时,它可能会有一个非空的state对象。这可能发生在当页面设置一个state对象(使用pushState或者replaceState)之后用户重启了浏览器。当页面重新加载,页面将收到onload事件,但不会有popstate事件。然而,如果你读取history.state属性,将在popstate事件发生后得到这个state对象

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>history API</title>
<style>
html,body{
height: 100%;
overflow: hidden;
margin: 0;
padding: 0;
}
aside{
background-color: #c0c0c0;
width: 220px;
float: left;
height: 100%;
}
aside ul{
font-size: 20px;
line-height: 2;
}
aside ul li{
cursor: pointer;
}
article{
background-color: #f5f5f5;
margin-left: 220px;
padding: 20px;
overflow: scroll;
height: 100%;
width: 300px;
font-size: 20px;
}
</style>
</head>
<body>
<aside>
<ul id="list"></ul>
</aside>
<article>
<p id="content"></p>
</article>
</body>
<script src="data.js"></script>
<script>
(function(){
var listElement=document.querySelector('#list');
for(var title in data){
var liElement=document.createElement('li');
liElement.innerHTML=title;
liElement.setAttribute('data-title',title);//自定义属性
listElement.appendChild(liElement);
}
var liElements=document.querySelectorAll('#list>li');
var content=document.querySelector('#content');
//注册每一个元素事件
for(var i=0;i<liElements.length;i++){
liElements[i].addEventListener('click',function(){
//拿到被点击元素的名字 title
var title=this.dataset['title'];//通过dataset获取
content.innerHTML=data[title];//赋值
//操作历史记录
if(window.history&&history.pushState){
//添加一个新的历史记录
history.pushState(title,'title没有任何浏览器支持','?t='+title);
}else{
console.log('不支持');
}
});
}
//当我们在伪造访问历史中前进或后退时会执行一个popstate事件
window.addEventListener('popstate',function(e){
content.innerHTML=data[e.state];
});
//window.location="http://www.baidu.com";
//第一次请求过来 获取地址栏中的t参数
var title=window.location.search.split('=')[1];//用=分割
if(title){//有值
console.log(decodeURI(title));//decodeURI 从URL编码转换到之前的状态
content.innerHTML=data[decodeURI(title)];
}
})();
</script>
</html>

二、全屏显示 API

requestFullScreen();全屏显示方法

 <script>
(function(){
      //点击图片让网页全屏显示
var img=document.querySelector('#img_full');
img.addEventListener('click',function(e){
if(document.body.webkitRequestFullScreen){//谷歌
document.body.webkitRequestFullScreen();
}else if(document.body.mozRequestFullScreen){//火狐
document.body.mozRequestFullScreen();
}else{
document.body.requestFullScreen();//其他
e.preventDefault();
} });
//点击h3标签,让p标签里的内容全屏展示
var h3=document.querySelector('#title_1');
var p=document.querySelector('#content_1');
h3.addEventListener('click',function(e){
if(p.webkitRequestFullScreen){
p.webkitRequestFullScreen();
}
})
})() </script>

三、网页存储

  1. Application Cache 让网页离线访问的技术
  2. getItem方式获取一个不存在的键 ,返回空字符串   
    txtValue.value = localStorage.getItem('key1');
  3. []方法 返回undefined  
    txtValue.value = localStorage['key1'];
 <!DOCTYPE html>
<html lang="zh-CN"> <head>
<meta charset="UTF-8">
<title>Web Storage</title>
<meta name="author" content="汪磊">
</head> <body>
<div>
<textarea id="txt_value" cols="80" rows="10"></textarea>
</div>
<button id="btn_set">存储</button>
<button id="btn_get">读取</button>
<script>
if (!window.localStorage) {
alert('不支持LocalStorage');
} else {
var btnSet = document.querySelector('#btn_set');//获取按钮
var btnGet = document.querySelector('#btn_get');
var txtValue = document.querySelector('#txt_value');
btnGet.addEventListener('click', function() {
// txtValue.value = localStorage.getItem('key1');
txtValue.value = localStorage['key1'];//会话用sessionStorage
});
btnSet.addEventListener('click', function() {
// localStorage.setItem('key1', txtValue.value);
localStorage['key1'] = txtValue.value;
});
}
</script>
</body> </html>

第89天:HTML5中 访问历史、全屏和网页存储API的更多相关文章

  1. 全屏显示网页FULLSCREEN API

    第一次看到应用 Fullscreen API 全屏显示网页,是 FaceBook 中的照片放大.作为一个比较新的 API,目前只有 Safari.Chrome 和 FireFox 三种浏览器支持该特性 ...

  2. Android WebView 总结 —— 使用HTML5播放视频及全屏方案

    在APP开发的过程中,会碰到需要在WebView中播放视频的需求,下面讲解一下如何在WebView中使用html5播放视频. 1.让视频在各个Android版本能够正常播放 在AndroidManif ...

  3. 解决VMware中Ubuntu18.04全屏问题

    在VMware中Ubuntu18.04全屏问题   在虚拟机机中安装完Ubuntu18.04之后界面显示的特别小,默认的好像是800*600分辨率,看着不舒服.先是在设置->设备->显示 ...

  4. Android: 在native中访问assets全解析

    本文总结在Android Native C++开发中访问APK中的assets资源的方法 在CMake中添加相关NDK LIB的 依赖 因为我们接下来用到的一些函数实现在NDK库libandroid. ...

  5. 用html5 js实现浏览器全屏

    项目中需要将后台浏览器的窗口全屏,也就是我们点击一个按钮要实现按F11全屏的效果. 在HTML5中,W3C制定了关于全屏的API,就可以实现全屏幕的效果,也可以让页面中的图片,视频等全屏目前只有goo ...

  6. [JavaScript] 用html5 js实现浏览器全屏

    项目中需要将后台浏览器的窗口全屏,也就是我们点击一个按钮要实现按F11全屏的 效果. 在HTML5中,W3C制定了关于全屏的API,就可以实现全屏幕的效果,也可以 让页面中的图片,视频等全屏目前只有g ...

  7. WebView中的视频全屏的相关操作

    近期工作中,基本一直在用WebView,今天就把它整理下: WebView 顾名思义,就是放一个网页,一个看起来十分简单,可是用起来不是那么简单的控件. 首先你肯定要定义,初始化一个webview,事 ...

  8. QT中关于窗口全屏显示与退出全屏的实现

    近期在学习QT时遇到了很多问题这也是其中一个,个人通过在各种书籍和网络上的查阅找到了一些关于这方面的答案,希望能给大家一些帮助. 首先,在QT中对于窗口显示常用的有这么几个方法可以调用: Qt全屏显示 ...

  9. CKPlayer 只调用HTML5播放器时全屏问题 这只是Chrome浏览器的渲染bug

    如题,在系统中使用CKPlayer播放器,一切顺利,偶然发现没有全屏按钮, 正常的全屏按钮是这样的: 经过一步步调试,发现问题出在iframe, 当视频页面在iframe内时,全屏按钮不显示了,这个和 ...

随机推荐

  1. 实验三 敏捷开发与XP实践-1

    实验内容 XP基础 XP核心实践 相关工具 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 2.完成实验.撰写实验报告,实 ...

  2. 20155315 2016-2017-2《Java程序设计》课程总结

    学号 2016-2017-2<Java程序设计>课程总结 每周作业链接汇总 预备作业1:第一次写博客,也是第一次用Markdown,具体流程都还不是很熟悉 预备作业2:对做中学的理解及对c ...

  3. 20155317 2016-2017-2 《Java程序设计》第十学习总结

    20155317 2016-2017-2 <Java程序设计>第十学习总结 教材学习内容总结 1.网络编程的概念: 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作 ...

  4. 百度地图api 常用 例子

    功能一:获取map地图窗口的可视区域: var map = new BMap.Map("allmap");            // 创建Map实例 map.centerAndZ ...

  5. webUploader实现大文件分片,断点续传

    问题: 公司现在的业务需求是要上传一个大文件,上一次写了一篇博客,做了一个简单的文件上传,支持单文件,大型文件上传 现在对之前的上传进行优化,支持断点续传,秒传功能 上次博客:[http://www. ...

  6. Windows 下在 Python (Anaconda) 中安装 Dlib 库

    0. 引言 介绍在 Windows  操作系统下,在 Python 的 Anaconda 集成环境中,安装 Dlib 库 : 对于不了解源码编译的,或者利用 cmake 方法失败的,可以尝试下此方法: ...

  7. 袋鼠云研发手记 | 数栈·开源:Github上400+Star的硬核分布式同步工具FlinkX

    作为一家创新驱动的科技公司,袋鼠云每年研发投入达数千万,公司80%员工都是技术人员,袋鼠云产品家族包括企业级一站式数据中台PaaS数栈.交互式数据可视化大屏开发平台Easy[V]等产品也在迅速迭代.在 ...

  8. MATLAB 笔记

    MATLAB的学习 Matlab 主要有5大部分构成,分别是MATLAB语言,桌面工具与开发环境,数学函数库 ,图形系统和应用程序接口.以及众多的专业工具.

  9. NodeJS实现同步的方法

    NodeJS被打上了单线程.非阻塞.事件驱动…..等标签. 在单线程的情况下,是无法开启子线程的.经过了很久的研究,发现并没有thread函数!!!但是有时候,我们确实需要“多线程”处理事务.node ...

  10. Python:默认参数

    Python是个人最喜欢的语言,刚开始接触Python时,总觉得有很多槽点,不太喜欢.后来,不知不觉中,就用的多了.习惯了.喜欢上了.Python的功能真的很强大,自己当初学习这门语言的时候,也记录过 ...