在后退按钮上保留动态更改的HTML

Mad*_*d0g 47 html ajax firefox browser-history history.js

这太棒了,我经常看到这个在其他网站上工作但从未在我正在工作的网站上工作.

我用ajax引入了新内容,我知道history.js和History API,我不想更改URL,只是让浏览器缓存新的HTML内容,这样当用户离开页面并返回使用时后退按钮,它仍然有更新的HTML.

我看到这在其他站点中一直有效,没有更改URL或使用#井号.
是否有一个技巧让它工作或是由浏览器随机决定?
如果我不想使用URL来获取此信息,是否有一个简单的替代方案?

Gro*_*ver 41

现在大约十五年了,我一直在使用我曾经通过痛苦的试验和错误发现的两个技巧:输入字段值 - 尤其是"隐藏的" - 在浏览器的历史记录中与URL一起保存 - 和 - onLoad事件通过后退(或前进)按钮返回页面时调用.

这意味着您可以在隐藏的字段中存储尽可能多的"状态"(记住将它们放在表单中),然后在"onLoad"上"重做"更改.我通常将'render'部分作为一个单独的函数...换句话说,在动态发生时,我首先写入隐藏字段 - 然后调用render函数.然后,我将各种动态性的各种渲染函数聚集在一起,并从onLoad中调用它们.

我要强调的是,我从来没有在任何手册中寻找过 - 所以不能提供任何保证 - 但我已经可靠地使用它一段时间了(因为Netscape !!!)它适用于'很多'浏览器(所有IE浏览器) ,铬,FF - 但至于其他人,我从未尝试过.)

如果有人有一个更"正确" - 而且不那么乏味的方式,那么我会很高兴听到它.但这确实可以解决问题.

  • 嘿Groover,感谢回复,我理解它是如何手动完成的(即保存状态'参数',然后在用户返回页面时重新加载).问题是,我在许多ajax网站上看到(使用firefox,如其他评论中所述),当我按下并且根本不需要重新加载时,HTML仍然存在.我很想知道这是怎么做到的. (2认同)
  • 在重新阅读你的回复时,我会进一步注意到我所描述的技术不需要实际的服务器旅行来"重新加载"页面 - 或其任何部分 - 或修改URL等 - 效果是当你按下返回按钮返回页面,所有动态变化都是第一次看到页面时神奇地到位 - 无论是通过ajax放在首位 - 还是简单地说,总结一列数字.如果已经理解了,请原谅我.:) (2认同)

hon*_*eps 9

RES的作者在这里,在/ r/javascript中找到了你的问题

显然,Firefox最近添加了单独执行此操作的功能,但是当浏览器不为您执行此操作时,没有"好"方法可以执行此操作.

RES过去做的是添加#page = n标记,其中n是您的页码.这样,在页面加载时,RES知道你必须来自后退按钮,如果已经有一个location.hash - 不幸的是,这个特殊的行为在Firefox和Chrome中找到导致你滚动到的时候btrl-f find另一个页面(page = n + 1),因为hashchange会关闭让用户恼火的查找对话框......

所以现在RES会做一些丑陋和不完美的体操来猜测你是否通过后退按钮到达了页面.无论何时加载新页面,它都会将该数字保存在sessionStorage中(如localStorage,但在选项卡的本地),并在通过后退按钮显示时会触发该页码的请求.

但是:最近我在FF和Chrome中进行了测试,似乎哈希变化不再"取消"ctrl-f查找对话框,所以我的建议是你使用它.在页面加载时,如果存在哈希,则加载由该哈希确定的相关数据.

如果你想变得非常疯狂,你可以将实际的HTML内容存储在localStorage中,并通过后退按钮在pageload上重新加载它.这可能不是最有效的做事方式,并且几乎肯定会导致与依赖DOM的javascript冲突,所以谨慎行事!

"最佳"解决方案实际上取决于您的网站正在做什么/内容的外观/行为.