Ajax / HTML5历史状态(popState, pushState等)-后退按钮行为
Ajax / HTML5 history states (popState, pushState, etc) - back button behavior
关于HTML5的pushState
功能有几个问题,但我无法找到任何关于我遇到的两个问题。我的popstate
处理程序定义如下:
$(window).bind('popstate', function (e) {
if (!e.originalEvent.state)
return;
LoadContent({ url: e.originalEvent.state.path });
}
LoadContent
调用只是使用ajax填充一个内容窗格。
问题1:假设我们从我的站点的page1
开始浏览它。LoadContent
不会被调用,因为没有state
。让我们想象一下,我的浏览记录是这样的:
page1 -> (ajax)page2 -> (ajax)page3 -> (back pressed)page2 -> (back pressed)page1
当我按下浏览器的后退按钮去page2
,一切都很好。但是,当我再次按回时,应该加载page1
的内容,e.originalEvent.state
是null,这意味着LoadContent不会被调用,因此内容将与page2
保持相同。我怎么能得到page1
的内容加载时,按回?
问题2:假设我们从page3
按回page2
,这意味着我们通过ajax加载第二页的内容。现在想象一下,我们再次浏览(即,在浏览器的地址栏中手动输入URL)到page3
,然后再次按回进入page2
。浏览器不会显示第二页,而是只显示我们之前检索到的page2
内容的ajax结果,这样页面的其余部分就不会被加载。如何解决这个问题?
谢谢你的帮助!
您的问题1:
您需要重新加载整个页面,或者通过ajax重新加载它,因为初始页面中的数据不会被推送到历史记录中。或者您可以更改页面加载事件以从ajax加载数据并动态加载内容,然后您将拥有需要推送到历史记录的必要json数据。
我刚刚遇到了和你的问题2相同的问题。
你可以发送HTTP报头来阻止web浏览器缓存和显示XHR内容。在执行历史对象JS的页面上执行此操作。
PHP:header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 正在添加'X'按钮,在文本字段旁边使用javascript
- 多个单选按钮组相互干扰
- JavaScript下拉菜单-点击按钮并根据所选值重定向到url
- Javascript按钮下拉列表
- jquery试图按名称获取按钮位置
- 漂亮照片图片库中的Facebook赞按钮
- 扩展移相器按钮类不工作
- 通过单击表单中的按钮,在代码生成中使用javascript生成字母数字代码
- 单击按钮以等待单击按钮
- 剑道UI内联编辑:如何在点击其他按钮时隐藏按钮
- 单击按钮后如何逐个调用分区,上一个分区将隐藏
- 如何从querySelectorAll中获取按钮类型
- 如何在输入字段中的按钮的帮助下打开日历,该字段的类型为“=”;日期”;
- Facebook共享按钮/history.pushstate/错误的url
- 如何在使用HTML5 pushState更改浏览器URL时处理后退按钮
- pushState和back按钮可以工作,但内容不会改变
- Ajax / HTML5历史状态(popState, pushState等)-后退按钮行为
- 返回按钮在浏览器使用pushState后不能正常工作(在Chrome)
- History.pushState 浏览器后退和前进按钮失败