博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(一)HTML5 - pushState 无刷新更新地址
阅读量:5368 次
发布时间:2019-06-15

本文共 1647 字,大约阅读时间需要 5 分钟。

可以解决什么问题:

可以实现网页的ajax加载,同时又能完成URL的改变而没有网页跳转刷新的迹象,就像是改变了网页的hash(#)一样。

优于hash:

避免了改变hash的问题,避免了用户不理解URL的形式感到疑惑,同时还有onpopstate提供监听,良好响应后退前进。而且它不需要这个URL真实存在。

HTML5 的 pushState+Ajax

pushState() 的基本参数是:

1 var state = ( {2 url: ~href, title: ~title, ~additionalKEY: ~additionalVALUE3 } );4 window.history.pushState(state, ~title, ~href);5 window.history.replaceState( state, ~title, ~href);    // 替换

pushState、replaceState 的区别

pushState()可以创建历史,可以配合popstate事件,而replaceState()则是替换掉当前的URL,不会产生历史。

注:

只能用同域的URL替换,例如你不能用http://baidu.com去替换http://google.com。

state对象不存储不可序列化的对象如DOM。

pushState 配合 popstate 监听

1 window.addEventListener('popstate', function(evt){2     var state = evt.state;3     var tilte = state.tilte ;4     var url = state.url5     document.title=title;6     doSomething(url);  // 自定义函数7 }, false);

popstate与hashChange

对于http://www.abc.com/path?search=ghj#hashstring 这个url来说,

① http://为协议

② www.abc.com为host
③ path为path,也就是我们的子目录,每个子目录可以干很多事情
④ #hashstring为hash相关

①-③页面会刷新,④页面不刷新,

pushState与改变hash 相同点:可以改变url地址

pushState与改变hash 不同点:hashChange只能改变hashstring 部分,pushState可改变①-③而不刷新页面

popstate 为1-3环节的变化引起的回调

hashChange 为hash变化引起的回调,是不同的

 

实例应用 - 劫持后退按钮

(function(window, location) {history.replaceState(null, document.title, location.pathname+"#!/stealingyourhistory");history.pushState(null, document.title, location.pathname);window.addEventListener("popstate", function() {if(location.hash === "#!/stealingyourhistory") {history.replaceState(null, document.title, location.pathname);setTimeout(function(){location.replace("http://www.baidu.com/");},0); } }, false);  }(window, location));

 

转载于:https://www.cnblogs.com/huair_12/p/4173677.html

你可能感兴趣的文章
BZOJ 1226: [SDOI2009]学校食堂Dining
查看>>
数组去重的几种方法
查看>>
包装类的自动装箱与拆箱
查看>>
ShareSDk的使用
查看>>
android使用web加载网页的js问题
查看>>
libvirt log系统分析
查看>>
poj 1068 Parencodings
查看>>
docker 数据卷管理
查看>>
adb
查看>>
如何让一个div的大小,从某一个特定值开始,随内容的增加而自动变化?
查看>>
P1977 出租车拼车(DP)
查看>>
iOS开发--完整项目
查看>>
我的博客园皮肤模板
查看>>
正则表达式
查看>>
java基础:不同进制的表现形式
查看>>
Base64转换为blob对象
查看>>
gulp自动化压缩合并、加版本号解决方案
查看>>
windows下面安装Python和pip教程
查看>>
Java 动态向 JTable 中添加数据
查看>>
平安科技移动开发二队技术周报(第九期)
查看>>