HTML5无刷新修改URL
HTML5新添加了两个api分别是pushState和replaceState,DOM中的window对象通过window.history方法提供了对浏览器历史记录的读取,可以在用户的访问记录中前进和后退,我们可以开始操作这个历史记录堆栈。
实例一、通过pushState修改URL
DEMO http://www.qttc.net/static/demo/html5_20130320/test.html
通过这句代码可以无刷新改变URL
window.history.pushState({},0,url);
DEMO代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
<!DOCTYPE html> < html > < head > < meta charset = "utf-8" /> < title >HTML5无刷修改url - 琼台博客</ title > < script type = "text/javascript" > function changeURL(){ var url = document.getElementById('url').value; window.history.pushState({},0,'http://'+window.location.host+'/'+url); } </ script > </ head > < body > < h1 >html5无刷新改变url</ h1 > < div id = "info" style = "margin:30px 0;" > 页面真实地址: < span style = "color:red;" >< script type = "text/javascript" >document.write(window.location.href);</ script ></ span > </ div > < div > 请输入要改变地URL字符串:< input id = 'url' type = "text" /> < button onclick = "changeURL();" >点击无刷改变url</ button > </ div > < div style = "color:red;margin-top:30px;" >请使用支持html5的浏览器访问</ div > < div style = "margin-top:30px;" >< a href = "http://www.qttc.net/201303292.html" target = "_blank" >《html5无刷新改变URL》</ a > - 琼台博客</ div > </ body > </ html > |
截图:
在input输入框内输入haha.html点击“点击无刷新改变url”按钮即可实现
实例二、利用ajax配合pushState翻页无刷新的动作
主要在ajax发起数据请求,在数据页面响应后利用pushState修改分页参数,达到模拟真实翻页效果,并且写入历史表达到后退时能恢复上一页的数据
DEMO http://www.qttc.net/static/demo/html5_20130320/demo-page.html
demo-page.html代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
<!DOCTYPE html> < html > < head > < meta charset = "utf-8" /> < title >HTML5无刷修改url - 琼台博客</ title > < script type = "text/javascript" > var changeURL = function(){ if(location.href.indexOf("?") > -1){ var arr = location.href.split('?'); var urlbase = arr[0]; var pageObj = arr[1].match(/page=(\d+)/); var page = Number(pageObj[1]) || 1; }else{ var urlbase = location.href; var page = 1; } load = false; var content = document.getElementById("content"); var ajax = new XMLHttpRequest(); // 调用数据回掉函数 var ajaxCallback = function(){ if(ajax.readyState == 4){ load = false; result = eval('('+ajax.responseText+')'); content.innerHTML = result.data; next.href = urlbase + "?page=" + (page + 1); // push到历史记录里,可以在点击后退时从历史记录里恢复内容 // 并且无刷修改url地址 window.history.pushState({content:content.innerHTML,page:page},page,urlbase + "?page=" + page); } }; // 点击事件 document.getElementById('next').onclick = function(event){ if(!load){ load = true; content.innerHTML = '加载中数据中...(注意看数据返回后url改变)'; page++; ajax.open('GET','shuju.php?page='+page, true); ajax.onreadystatechange = ajaxCallback; ajax.send(''); return false; } }; // 记录到历史里,当点击后退按钮还退回上次页面请求前的页面内容 window.onpopstate = function(){ content.innerHTML = history.state.content; page = history.state.page; } // 修改当前页面在 history 中的记录 window.history.replaceState({content:content.innerHTML,page:page},page,urlbase + (page > 1 ? '?page=' + page : '' )); }; // 检测是否支持 try{ //监听事件 window.addEventListener('DOMContentLoaded', changeURL, false); }catch(e){ alert('浏览器不支持,请使用支持html5的浏览器'); } </ script > </ head > < body > < div id = "content" style = "width:300px;height:100px;border:1px solid #999;" >第1页的内容</ div > < div >< a id = "next" href = "?page=2" >下一页</ a ></ div > < div style = "color:red; margin-top:30px;" >请使用支持html5的浏览器测试</ div > </ body > </ html > |
shuju.php代码:
1
2
3
|
<?php sleep(3); echo json_encode( array ( 'data' => '第' . $_GET [ 'page' ]. '内容' )); |
DEMO贴图:
没有点击之前
点击后,发起ajax请求page=2数据
ajax返回后通过pushState修改URL,请看截图地址栏已经是page=2,页面没有刷新,因为firebug控制台中的ajax请求记录还在
点击后退箭头,恢复上一页的数据
最后
虽说这两个html5新加api能实现无刷新修改URL,但js毕竟是前端,为了安全是不能跨域的。比如本例中的demo域是在www.qttc.net下,不能修改到www.xxx.com域下。有不少人说这个特性解决了ajax局部刷新区域不容易被蜘蛛人抓取的问题,本人没有亲自验证,但却有可行之势,感兴趣的童鞋可以尝试下
HTML5无刷新修改URL的更多相关文章
- HTML5无刷新修改Url,history pushState/replaceState
一.认识window.history window.history表示window对象的历史记录,是由用户主动产生,并且接受javascript脚本控制的全局对象.window对象通过history对 ...
- HTML5新api即pushState和replaceState实现无刷新修改url
1,首先我面临一个需求,页面回退时需要知道来之前的页面状态.很简单,回退时在url里赋参数即可.问题是在ipad上,回退按钮是安卓那边的,我控制不了.只好采用js无刷新修改url历史记录,来告诉服务器 ...
- HTML5实现无刷新修改URL
前言 今天在做一个vue的搜索功能,需要从搜索结果页面跳转到细节页面,然后点击返回还能返回到刚刚的结果页面,如果只用window.history.go(-1)当然会重新刷新搜索页面,当然是不行的. 我 ...
- 通过history.pushState无刷新改变url
通过history.pushState无刷新改变url 背景 在浏览器中改变地址栏url,将会触发页面资源的重新加载,这使得我们可以在不同的页面间进行跳转,得以浏览不同的内容.但随着单页应用的增多,越 ...
- history.pushState无刷新改变url
通过history.pushState无刷新改变url 背景 在浏览器中改变地址栏url,将会触发页面资源的重新加载,这使得我们可以在不同的页面间进行跳转,得以浏览不同的内容.但随着单页应用的增多,越 ...
- 微信小程序中无刷新修改
1.点击事件无刷新修改 原理:onload事件中是把这个分类和品牌的列表全部拿出来,拼接成数组的格式,在小程序中遍历的时候就要把小标(index)给绑定到左侧的品牌上,然后js中获取index的值,就 ...
- 页面被iframe与无刷新更换url方法
页面被iframe问题解决方法 if (window.top.location !== window.self.location) { const data = JSON.stringify({ if ...
- JavaScript 无刷新修改浏览器URL地址栏
//发现地址栏已改为:newUrlvar stateObject = {}; var title = "Wow Title"; var newUrl = "/my/awe ...
- history.pushState 实现浏览器页面不刷新修改url链接
最近遇到了在不刷新页面的情况下修改浏览器url链接的需求,遂求助于万能的度娘,最终通过history.pushState()完美解决问题.现在将我理解的一些内容分享一下,不对的地方欢迎大家指出. 在使 ...
随机推荐
- Windows 下 Git 安装与初始配置
官方下载地址:https://git-scm.com/download/win,我下载的最新版是 Git-2.15.1.2-64-bit.exe . Windows 下安装步骤 1.相关信息,直接“ ...
- MVC 之 System.Web.Optimization找不到引用
在MVC4的开发中,如果创建的项目为空MVC项目,那么在App_Start目录下没有BundleConfig.cs项的内容,在手动添加时在整个库中都找不到:System.Web.Optimizatio ...
- Spring学习笔记五:Spring进行事务管理
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6776256.html 事务管理主要负责对持久化方法进行统一的提交或回滚,Spring进行事务管理即我们无需在 ...
- AppStore上传已经开发好的App的方法
可以很好的解决ERROR ITMS-90168:"The binary you uploaded was invalid'的问题: 1.下载:Xcode 8.1 找到:Application ...
- 解决java网络编程IPv6问题
如果系统中开启了IPV6协议(比如window7),java网络编程经常会获取到IPv6的地址,这明显不是我们想要的结果,搜索发现很多蹩脚的做法是:禁止IPv6协议.其实查看官方文档有详细的说明: j ...
- weblogic部署存在中文乱码导致部署失败
问题描述: weblogic控制台显示错误,是受管节点console日志 <-- 下午10时19分16秒 CST> <Info> <Security> <BE ...
- 监听Sms.Content_URI而不是Sms.Inbox.CONTENT_URI
getContentResolver().registerContentObserver(Sms.Inbox.CONTENT_URI, true, newMsgObserver); / ...
- 【PHP+JS】uploadify3.2 和 Ueditor 修改上传文件 大小!!
一.写在最开始: 前提条件:服务器php.ini 已经修改了变量[ upload_max_filesize ],可以设定为8M,一般8M足够用了.(重启) 1.uploadify3.2 修改文件大小: ...
- 【js+jquery】通用、简单的JS 提示框
1.该插件不需要依赖 jquery,仅仅使用了原生js 2.简单.通用.可自定义修改样式.支持等待N秒消失.支持消失后跳转其他url , 功能还是比较完善的. 3.不废话,上代码: (我存放的位置在 ...
- (原+转)win7上编译caffe支持python及matlab
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/7126126.html 参考网址: https://github.com/happynear/caffe ...