• (一)HTML5


    可以解决什么问题:

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

    优于hash:

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

    HTML5 的 pushState+Ajax

    pushState() 的基本参数是:

    1 var state = ( {
    2 url: ~href, title: ~title, ~additionalKEY: ~additionalVALUE
    3 } );
    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.url
    5     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));
  • 相关阅读:
    HDU 2112 HDU Today,最短路径算法,Dijkstra
    最小生成树,POJ和HDU几道题目的解题报告(基于自己写的模板)
    图基本算法 最小生成树 Prim算法(邻接表/邻接矩阵+优先队列STL)
    合并相同值得单元格(纵向)
    request.startAsync()不支持异步操作
    DIV强制不换行
    兼容各浏览器的css背景图片拉伸代码
    程序猿之八荣八耻
    使用JEECG过程中的问题汇总(持续更新)
    Firefox的缓存问题
  • 原文地址:https://www.cnblogs.com/huair_12/p/4173677.html
Copyright © 2020-2023  润新知