• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    ajax后退解决方案
    一、使用iframe,通过document.write产生历史
    复制代码 代码如下:

    !DOCTYPE html>
    html>
    head>
    meta charset="utf-8"/>
    title>0/title>
    /head>
    body>
    input type="button" value="加1" onclick="add()" />
    div id="info" style="border:red 1px solid;width:200px;padding:10px;margin:5px;">0/div>
    /body>
    /html>
    script src="history-0.1.js">/script>
    script>
    var info = document.getElementById('info');
    var i = 1;
    function add() {
    info.innerHTML = i;
    document.title = i;
    var data = {
    param : i,
    func : func
    };
    History.push(data);
    i++;
    }
    History.push({param:0, func: func});
    function func(i) {
    info.innerHTML = i;
    document.title = i;
    }
    /script>

    点击按钮后更新页面DOM(模拟ajax提交),会发现浏览器后退按钮可用了。点击后退,可返回到前一个状态。
    这种方式缺点是只支持IE和Firefox。
    ajax后退解决方案(二)
    二、使用iframe,通过修改iframe.src产生历史
    复制代码 代码如下:

    !DOCTYPE html>
    html>
    head>
    meta charset="utf-8" />
    title>0/title>
    /head>
    body>
    input type="button" value="加1" onclick="add()" />
    div id="info" style="border:red 1px solid;width:200px;padding:10px;margin:5px;">0/div>
    /body>
    /html>
    script src="history-0.2.js">/script>
    script>
    var info = document.getElementById('info');
    var i = 1;
    function add() {
    info.innerHTML = i;
    document.title = i;
    var data = {
    param : i,
    func : func
    };
    History.push(data);
    i++;
    }
    History.push({param:0, func: func});
    function func(i) {
    info.innerHTML = i;
    document.title = i;
    }
    /script>

    较上一篇多了个blank.html,是一个空html架子,没有JS逻辑代码,如下
    复制代码 代码如下:

    !DOCTYPE HTML>
    html>
    head>
    title>blank.html/title>
    /head>
    body>
    /body>
    /html>

    每次ajax操作会往iframe.src的问号后附加一个数字以记录历史。点击后退按钮,iframe的onload事件中获取iframe的url,根据问号后的数字去取记录。
    所有浏览器均支持该方式。缺点是如果主页面中存在其它iframe,且修改了其src。历史管理会混乱。
    三、使用iframe,通过修改iframe.src产生历史,回调写在iframe对应的html页面中
    复制代码 代码如下:

    !DOCTYPE html>
    html>
    head>
    meta charset="utf-8" />
    title>0/title>
    /head>
    body>
    input type="button" value="加1" onclick="add()" />
    div id="info" style="border:red 1px solid;width:200px;padding:10px;">0/div>
    /body>
    /html>
    script src="history-0.3.js">/script>
    script>
    var info = document.getElementById('info');
    var i = 1;
    function add() {
    var data = {
    param : i,
    func : func
    };
    History.push(data);
    i++;
    }
    History.push({param:0, func: func});
    function func(i) {
    info.innerHTML = i;
    document.title = i;
    }
    /script>

    与方案2相同也是使用iframe.src来产生历史,也需要一个单独的html页面(iframe)。不同的是回调逻辑不是写在iframe.onload中,而直接写在html页面中(上一篇则是空的html架子)。blank.html如下
    复制代码 代码如下:

    !DOCTYPE HTML>
    html>
    head>
    title>blank.html/title>
    /head>
    body>
    script>
    var url= location.href;
    if(url.indexOf('?')>-1) {
    var idx = url.substr(url.indexOf('?')+1);
    parent.History.get(idx);
    }
    /script>
    /body>
    /html>

    和方案2一样所有浏览器均支持。
    四、通过修改location.hash产生历史,hashchange事件处理后退
    复制代码 代码如下:

    !DOCTYPE html>
    html>
    head>
    meta charset="utf-8" />
    title>0/title>
    /head>
    body>
    input type="button" value="加1" onclick="add()" />
    div id="info" style="border:red 1px solid;width:200px;padding:10px;">0/div>
    /body>
    /html>
    script src="history-0.4.js">/script>
    script>
    var info = document.getElementById('info');
    var i = 1;
    function add() {
    var data = {
    param : i,
    func : func
    };
    History.push(data);
    i++;
    }
    History.push({param:0, func: func});
    function func(i) {
    info.innerHTML = i;
    document.title = i;
    }
    /script>

    每次ajax操作去改变location.hash的值,每次修改后地址栏均会有所体现。在window.onhashchange中监听该事件。通过hash的值取对应的历史。
    较iframe的好处是可以复制地址栏的url直接进入该历史记录,缺点是IE6/7不支持。
    文中代码打包下载

    相关:

    http://msdn.microsoft.com/en-us/library/cc288209(v=vs.85).aspx

    https://developer.mozilla.org/en/DOM/window.onhashchange

    http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#event-hashchange

    您可能感兴趣的文章:
    • Ajax回退刷新页面问题的解决办法
    • 通过history解决ajax不支持前进/后退/刷新的问题
    上一篇:Ajax常见问题有哪些?
    下一篇:防止ajax重复请求的方法(GET和POST)
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    ajax后退解决方案 ajax,后退,解决方案,ajax,